{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## QQ2\n",
    " Bookmark this page\n",
    "QQ2\n",
    "0 points possible (ungraded)\n",
    "The table shown below provides you with the actual demand of a product for weeks 1 through 15. You can download this data in the form of a comma separated values file using the link provided below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data = pd.read_excel('L1V2-data.xlsx', names=['week', 'demand'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>week</th>\n",
       "      <th>demand</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>Week 12</td>\n",
       "      <td>5.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>Week 13</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>Week 14</td>\n",
       "      <td>5.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>Week 15</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>Week 16</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       week  demand\n",
       "11  Week 12     5.3\n",
       "12  Week 13     5.0\n",
       "13  Week 14     5.2\n",
       "14  Week 15     6.0\n",
       "15  Week 16     NaN"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.tail()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\hat{d_{15,16}} = \\alpha * d_{15} + (1-\\alpha) * \\hat{d_{14,15}} $$\n",
    "$$ \\hat{d_{15,16}} = \\alpha * d_{15} + (1-\\alpha) * (\\alpha * d_{14} + (1-\\alpha) * \\hat{d_{13,14}}) $$\n",
    "$$ = \\alpha * d_{15} + \\alpha(1-\\alpha)*d_{14} + (1-\\alpha)^2 * \\hat{d_{13,14}} = ...$$\n",
    "\n",
    "As you can see, the coefficient for the value for any given week i is as follows:\n",
    "\n",
    "$$ c(i)= \\alpha * (1-\\alpha)^{15-i} $$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     week  demand  week_num             c\n",
      "0  Week 1     1.0         1  3.348078e-08\n",
      "1  Week 2     4.0         2  1.116026e-07\n",
      "2  Week 3     6.3         3  3.720087e-07\n",
      "3  Week 4     7.8         4  1.240029e-06\n",
      "4  Week 5     8.8         5  4.133430e-06\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "5.755542420196233"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data['week_num'] = data['week'].apply(lambda x: int(x.split()[-1]))\n",
    "alpha = 0.7\n",
    "data['c'] = data['week_num'].apply(lambda i: alpha * (1-alpha)**(15-i))\n",
    "data_15_16 = (data['demand'] * data['c']).sum()\n",
    "print(data.head())\n",
    "data_15_16"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## QQ3\n",
    "0 points possible (ungraded)\n",
    "\n",
    "Consider the data in the table shown below. (This is the same data you saw in the previous video.)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ a_{101} = \\alpha x_{101} + (1-\\alpha)(\\hat{a_{100}} + \\hat{b_{100}}) $$\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "131.345\n"
     ]
    }
   ],
   "source": [
    "x = dict()\n",
    "a = dict()\n",
    "b = dict()\n",
    "x_hat = dict() # x_hat[t] means the prediction for t+1 at time t\n",
    "\n",
    "x[100] = 92\n",
    "a[100] = 90\n",
    "b[100] = 8.5\n",
    "x_hat[100] = 98.5\n",
    "x[101] = 95\n",
    "\n",
    "alpha = 0.25\n",
    "beta = 0.08\n",
    "tau = 4\n",
    "\n",
    "t=101\n",
    "a[t] = alpha * x[t] + (1-alpha) * (a[t-1] + b[t-1])\n",
    "b[t] = beta * (a[t] - a[t-1]) + (1-beta) * b[t-1]\n",
    "x_hat[105] = a[101] + tau * b[101]\n",
    "\n",
    "print(x_hat[105])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## QQ4\n",
    " Bookmark this page\n",
    "QQ4\n",
    "\n",
    "The month of November is over, and by now we know that the actual demand for SKU #VMI1984 during this period was 35 units. Examine the data shown below. You can download it in the form of a comma separated values file using the link provided below."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Part 1\n",
    "0 points possible (ungraded)\n",
    "Assume that Alpha=0.25 and Beta = 0.10. Use a level and trend exponential smoothing approach to forecast the demand for December (t=11)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data = pd.read_excel('L1V4-data.xlsx', header=4)\n",
    "alpha = 0.25\n",
    "beta = 0.1\n",
    "omega = 0.05"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>t</th>\n",
       "      <th>x(t)</th>\n",
       "      <th>a^(t)</th>\n",
       "      <th>b^(t)</th>\n",
       "      <th>x^(t,t+1)</th>\n",
       "      <th>e(t)</th>\n",
       "      <th>e(t)^2</th>\n",
       "      <th>MSE</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>October</th>\n",
       "      <td>9</td>\n",
       "      <td>36</td>\n",
       "      <td>36.82</td>\n",
       "      <td>1.09</td>\n",
       "      <td>37.91</td>\n",
       "      <td>-1.1</td>\n",
       "      <td>1.2</td>\n",
       "      <td>4.52</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>November</th>\n",
       "      <td>10</td>\n",
       "      <td>35</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           t  x(t)  a^(t)  b^(t)  x^(t,t+1)  e(t)  e(t)^2   MSE\n",
       "October    9    36  36.82   1.09      37.91  -1.1     1.2  4.52\n",
       "November  10    35    NaN    NaN        NaN   NaN     NaN   NaN"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "38.19975"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a_hat_9 = 36.82\n",
    "b_hat_9 = 1.09\n",
    "x_10 = 35\n",
    "alpha = 0.25\n",
    "beta = 0.1\n",
    "a_hat_10 = alpha * x_10 + (1-alpha) * (a_hat_9+b_hat_9)\n",
    "b_hat_10 = beta * (a_hat_10 - a_hat_9) + (1-beta) * b_hat_9\n",
    "x_hat_10_11 = a_hat_10 + b_hat_10\n",
    "x_hat_10_11"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Part 2\n",
    "0 points possible (ungraded)\n",
    "Still assuming Alpha=0.25 and Beta = 0.10, now let Omega=0.05. Use exponential smoothing to forecast the mean square error (MSE) for November (t=10) demand forecast.\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4.7174049999999985"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_10 = 35\n",
    "x_hat_9_10 = 37.91\n",
    "mse_9 = 4.52\n",
    "omega = 0.05\n",
    "\n",
    "mse_10 = omega * (x_10 - x_hat_9_10) ** 2 + (1-omega) * mse_9\n",
    "mse_10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "36.03205"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "alpha = 0.25\n",
    "beta = 0.1\n",
    "phi = 0.9\n",
    "\n",
    "a_hat_9 = 35.31\n",
    "b_hat_9 = 0.52\n",
    "\n",
    "a_hat_10 = alpha * x_10 + (1-alpha) * (a_hat_9 + phi * b_hat_9)\n",
    "b_hat_10 = beta * (a_hat_10 - a_hat_9) + (1-beta) * phi * b_hat_9\n",
    "x_hat_10_11 = a_hat_10 + b_hat_10\n",
    "x_hat_10_11"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## PP1: Shah Alam Palm Oil Company\n",
    " Bookmark this page\n",
    "Palm oil is harvested from the fruit of oil palm trees and is widely used as a cooking oil throughout Africa, Southeast Asia, and parts of Brazil.  It is becoming widely used throughout the world as it is a lower cost alternative to other vegetable oils and has other attractive properties.  \n",
    "\n",
    "You are working for the Shah Alam Palm Oil Company (SAPOC) that harvests, processes, and sells palm oil throughout the region.  You are asked to review the sales volume (in pounds) of your premium palm oil by one of your customers, a local grocery store in the region.\n",
    "\n",
    "Download the spreadsheets with the monthly sales volume of palm oil here:\n",
    "\n",
    "In Excel format (link to ShahAlamPalmOil_Data.xlsx)\n",
    "\n",
    "In LibreOffice format (link ShahAlamPalmOil_Data.ods)\n",
    "\n",
    "### Part 1\n",
    "0 points possible (ungraded)\n",
    "Take a look at the data and chart or plot the demand (vertical axis) against the months (horizontal axis). Do you detect any type of trend over the last three years?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data = pd.read_excel('ShahAlamPalmOil_Data.xlsx', names=['month', 'year', 'demand'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>month</th>\n",
       "      <th>year</th>\n",
       "      <th>demand</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>Aug</td>\n",
       "      <td>2014</td>\n",
       "      <td>1746</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>Sep</td>\n",
       "      <td>2014</td>\n",
       "      <td>909</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>Oct</td>\n",
       "      <td>2014</td>\n",
       "      <td>1773</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>Nov</td>\n",
       "      <td>2014</td>\n",
       "      <td>2000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>Dec</td>\n",
       "      <td>2014</td>\n",
       "      <td>1512</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   month  year  demand\n",
       "31   Aug  2014    1746\n",
       "32   Sep  2014     909\n",
       "33   Oct  2014    1773\n",
       "34   Nov  2014    2000\n",
       "35   Dec  2014    1512"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>month</th>\n",
       "      <th>year</th>\n",
       "      <th>demand</th>\n",
       "      <th>date_str</th>\n",
       "      <th>date</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>Aug</td>\n",
       "      <td>2014</td>\n",
       "      <td>1746</td>\n",
       "      <td>2014-Aug</td>\n",
       "      <td>2014-08-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>Sep</td>\n",
       "      <td>2014</td>\n",
       "      <td>909</td>\n",
       "      <td>2014-Sep</td>\n",
       "      <td>2014-09-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>Oct</td>\n",
       "      <td>2014</td>\n",
       "      <td>1773</td>\n",
       "      <td>2014-Oct</td>\n",
       "      <td>2014-10-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>Nov</td>\n",
       "      <td>2014</td>\n",
       "      <td>2000</td>\n",
       "      <td>2014-Nov</td>\n",
       "      <td>2014-11-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>Dec</td>\n",
       "      <td>2014</td>\n",
       "      <td>1512</td>\n",
       "      <td>2014-Dec</td>\n",
       "      <td>2014-12-01</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   month  year  demand  date_str       date\n",
       "31   Aug  2014    1746  2014-Aug 2014-08-01\n",
       "32   Sep  2014     909  2014-Sep 2014-09-01\n",
       "33   Oct  2014    1773  2014-Oct 2014-10-01\n",
       "34   Nov  2014    2000  2014-Nov 2014-11-01\n",
       "35   Dec  2014    1512  2014-Dec 2014-12-01"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "data['date_str'] = data[['year', 'month']].apply(lambda x: '-'.join([str(e) for e in x]), axis=1)\n",
    "data['date'] = pd.to_datetime(data['date_str'])\n",
    "data.sort_values(by=['date'], inplace=True)\n",
    "data.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEPCAYAAABP1MOPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAIABJREFUeJzsnXl4XOV1uN8zkkbSaJcsyZZkecd4\nwWyOISxhDWsSEtIGSEOA0NIkJGnTJU3aNDRb27Rptl+btIQQIA1kKxDCEgKGhN1gMHg3NsaLZEmj\nfRlpNCPN+f1x75XHspbZN33v88yj0Xe/mTmaO5pzzy6qisFgMBjmLq50C2AwGAyG9GIUgcFgMMxx\njCIwGAyGOY5RBAaDwTDHMYrAYDAY5jhGERgMBsMcxygCg8FgmOMYRWAwGAxzHKMIDAaDYY6Tn24B\nZmLevHm6ePHidIthMBgMWcWrr77apaq1ke7PaEWwePFiNm/enG4xDAaDIasQkYPR7DeuIYPBYJjj\nGEVgMBgMcxyjCAwGg2GOYxSBwWAwzHGMIjAYDIY5zqyKQEQWisjTIrJTRHaIyF/Y69Ui8oSI7LV/\nVtnrIiLfE5F9IrJVRE4Le64b7P17ReSG5P1ZBoPBYIiUSCyCMeCvVXU1cCZwq4isBj4PbFTVFcBG\n+3eAy4EV9u0W4AdgKQ7gNuAMYANwm6M8DAaDwZA+ZlUEqtqmqq/Z9weBXUAjcBVwt73tbuD99v2r\ngHvU4iWgUkQWAJcCT6hqj6r2Ak8AlyX0rzEYDIYM5/XDfZz85d/R0jucblEmiCpGICKLgVOBTUC9\nqrbZh9qBevt+I3A47GEt9tp065Nf4xYR2Swimzs7O6MRz2AwGDKeX7/eSv9IkO2t/ekWZYKIFYGI\nlAL/B/ylqg6EH1NVBTQRAqnq7aq6XlXX19ZGXCFtMBgMGY+q8tRuLwCHerLMIhCRAiwl8FNVvd9e\n7rBdPtg/vfZ6K7Aw7OFN9tp06waDwTAn2N/l42C3pQCyShGIiAA/Anap6rfCDj0EOJk/NwC/Dlv/\nqJ09dCbQb7uQHgcuEZEqO0h8ib1mMBgMc4KnbWugrqyQQz0jaZbmKJE0nTsbuB7YJiKv22t/D/wr\n8AsRuRk4CHzIPvYocAWwDxgGbgJQ1R4R+Srwir3vK6rak5C/wmAwGLKAjbu8rKwvY3ldKTvbBmZ/\nQIqYVRGo6nOATHP4oin2K3DrNM91J3BnNAIaDAZDLjDgD/LKgR7+7F1LUYXf7WxnPKTkuab7ek0d\nprLYYDAYUsCzb3YxFlIuPLGO5moPwXGlfcCfbrEAowgMBoMhJWzc3UGlp4BTF1bSXO0B4FB3ZgSM\njSIwGAyGJDMeUv6wp5PzTqglP881oQgOZ0jmkFEEBoPBkGTeaOmj2xfgwhPrAFhQWUSeSzImhdQo\nAoPBYEgyT+3ykucSzjvBKpItyHPRWFlsFIHBYDDMFZ7a7eX05ioqPe6JteZqj1EEBoPBMBdo6x9h\nZ9sAF66qO2Z9YbXHxAgMBoNhLuD0FrroxGMVQXO1h25fgKHRsXSIdQxGERgMBkMSeXq3l6aqYpbX\nlR6znkmZQ0YRGAwGQ5LwB8d5bl8XF51Yh9W27SgTtQRGERgMBkPu8uL+bvzBEBdMcguBsQgMBoNh\nTvDULi/FBXmcubTmuGMVngLKi/KNRWAwGAy5ijOE5pwV8ygqyJtyT3NNZqSQGkVgMBgMSeDNjiFa\n+0YmqomnIlNqCYwiMBgMhiSwcXcHABesnF4RLKz20NIzwngoIZN+Y8YoAoPBYEgCT+/2sraxnPkV\nRdPuaa72EBgP0ZHmdtRGERgMBkOC6fUFePVgLxfOYA1A5qSQRjKz+E4R8YrI9rC1U0TkJRF5XUQ2\ni8gGe11E5Hsisk9EtorIaWGPuUFE9tq3G6Z6LYPBYMgF/vBmJyGFC1fVz7gvaxQBcBdw2aS1fwO+\nrKqnAF+yfwe4HFhh324BfgAgItXAbcAZwAbgNnuAvcFgMOQcT+32Mq/UzbrGihn3NVQW45L01xLM\nqghU9Rlg8pB5Bcrt+xXAEfv+VcA9avESUCkiC4BLgSdUtUdVe4EnOF65GAwGQ9YzNh7i93u8nL+y\nDtcs84gL8lw0ZEA76lmH10/DXwKPi8g3sZTJWfZ6I3A4bF+LvTbd+nGIyC1Y1gTNzc0ximcwGAzp\n4bVDfQz4x45rMjcdmZBCGmuw+BPAZ1V1IfBZ4EeJEkhVb1fV9aq6vra2NlFPazAYDClh4+4OCvKE\nc1bMi2h/cwa0o45VEdwA3G/f/yWW3x+gFVgYtq/JXptu3WAwGHKKp3Z52bCkmrKigoj2L6z20DUU\nwJfGdtSxKoIjwHn2/QuBvfb9h4CP2tlDZwL9qtoGPA5cIiJVdpD4EnvNYDAYcob2fj97vUMzFpFN\nZqL5XG/6rIJZYwQich9wPjBPRFqwsn/+DPiuiOQDfmyfPvAocAWwDxgGbgJQ1R4R+Srwir3vK6o6\nOQBtMBgMWU1b/wgAy2pLZ9l5lIkU0u5hTpxfPsvu5DCrIlDV66Y5dPoUexW4dZrnuRO4MyrpDAaD\nIYvoGw4CUOmJzC0EmVFLYCqLDQaDAeuK/Nm9nXE9R48vAEBV2JD62aj0FFBWmJ/WgLFRBAaDwQD8\n46+38+n7tsT1HL3D0SsCEWFhmlNIY60jMBgMhpzBO+jn2b1WW4jgeIiCvNiukfuGg+S5hLKi6L5a\nm6s97PUOxvSaicBYBAaDYc7zmzfacDpB99runVjoHQ5QWVwwa0XxZJprPBzuHSGUpnbURhEYDIY5\nz4NbWnFmy/cMx6kIoggUOyys9hAYC+EdHI35tePBKAKDwTCn2ecdZFtrPxfbnUJ7huJQBL5gVPEB\nh3RnDhlFYDAY5jQPbGnFJXDjWYuB+C2CqhKjCAwGgyFrCIWUB7cc4dwVtZxQXwYcTQGNhb7hIFUx\nuIYa7XbURhEYDAZDitl8sJfWvhE+cGrjhG8/VkWgqvQMB2JyDbnzXSyoKE5bLYFRBAaDYc7ywJYW\nPO48LllTT0Gei4rigpgVwUhwnMBYiMoYFAGktx21UQQGg2FO4g+O8/DWNi5dMx+P28r7ry5xx6wI\neu32ErG4hsAoAoPBYEg5v9/jZdA/xgdOPTojKy5F4LSXiCFYDFYtQefgKCOB8ZgeHw9GERgMhjnJ\nA1taqS0r5KxlNRNrVZ7YFUHfhEUQmyJYmMZ21EYRGAyGOUffcICndnt538kN5Ie1k6iJwyLomegz\nFLtrCKzmd6nGKAKDwTDneGRbG8FxPcYtBJZbp3c4gNVRPzr6bEUQT7AY0pNCahSBwWCYczy4pZUV\ndaWsaTh2EExNiZvguDIYw9jIXl/0swjCqfIUUFqYbxSBwWAwJJvDPcO8cqCX95/aiMixzeGcQG8s\njed6hwOUFeXH3Lk0ne2oZ5VYRO4UEa+IbJ+0/mkR2S0iO0Tk38LWvyAi+0Rkj4hcGrZ+mb22T0Q+\nn9g/w2AwGCLjwS2tAFx1SsNxx2psRdAdoyKINVDs0FxdnJmKALgLuCx8QUQuAK4CTlbVNcA37fXV\nwLXAGvsx3xeRPBHJA/4LuBxYDVxn7zUYDIaUoao88HorZyyppqnKc9zx+CyC2NpLhNNc7eFwz3DK\n21HPqghU9Rlg8qD5TwD/qqqj9h6vvX4V8DNVHVXVt7GG2G+wb/tUdb+qBoCf2XsNBoMhZWxr7Wd/\np++4ILFDPBZB33Ag5kCxQ3O1h9GxEJ1DqW1HHWuM4ATgXBHZJCJ/EJF32OuNwOGwfS322nTrBoPB\nkDLuf60Vd76Ly09aMOXxeGME1TEWkzksTFPmUKyKIB+oBs4E/hb4hUyOusSIiNwiIptFZHNnZ3yD\npA0Gg8EhOB7iN28c4eJVdVQUT+3CKXHn4c53xVRL0OsLxpwx5JCuWoJYFUELcL9avAyEgHlAK7Aw\nbF+TvTbd+nGo6u2qul5V19fW1sYonsFgMBzLc/u66PYFeP8p0zsjRITqGKqLA2MhhkbH4g4WN1YV\nI2loRx2rIngQuABARE4A3EAX8BBwrYgUisgSYAXwMvAKsEJEloiIGyug/FC8whsMBkOkPLillUpP\nAeevrJtxXyz9hvpG4qsqdijMz2NBeVHK21Hnz7ZBRO4DzgfmiUgLcBtwJ3CnnVIaAG5QqxRvh4j8\nAtgJjAG3quq4/TyfAh4H8oA7VXVHEv4eg8FgOI6h0TEe39HOB09rwp0/8/VvdYk76illE32G4owR\nAGmpJZhVEajqddMc+sg0+78OfH2K9UeBR6OSzmAwGBLAkzs78AdDXH3a7Dkq1SXuqBu/TXQejdM1\nBFac4A9vpjY+aiqLDQZDzrPXO0ieSzhlYdWse2NxDfVO9BmKzzUEliLwprgdtVEEBoMh5+kYGKW2\ntJA81+zJjdUlbgb9YwTGQhE/f2+cLajDaa6xModaUtiO2igCg8GQ83QM+KmvKIpor+Pn74siTtA7\nnDjXUDpqCYwiMBhSgKpy812v8L8vHUy3KHOSjgE/9WWFEe2Npbq4bzhIUYGLYndeTPKFk4521EYR\nGAwpYNPbPWzc7eW5vV3pFmVO0jEwSn15hBaBJ/rq4h5f/A3nHGpK3HjceUYRGAy5xk9sS6Bj0J9m\nSeYe/uA4/SNB6ssjtAhKY7EI4u8z5CAiE83nUoVRBAZDkvEO+Hl8e7t9P7XNxAxH3/NILQKnX1Bv\nVDGC+DuPhrOoxsNIMHVZQ7PWERgMhvj42SuHGQspV5w0nyd2dhAKKa4IslcMiaF9wLLCIlUElXYf\nou6h6ILFqxaUz74xQv77I6cfNzQnmRiLwGBIImPjIe7ddIhzV8zjjCU1BMc1qitNQ/x0RKkI8vNc\nVHoKorMIfIGEWgSpVAJgFIHBkFSe3OWlfcDP9WcumvBRdxj3UEpxFMH8CBUBQLXHHXGMIBRS+keC\nCQsWpwOjCAyGJPK/Lx2koaKIC0+so87+IjIB49TSMeCnMN9FeXHknvDqEnfEWUMD/iAhJWHB4nRg\nFIHBkCT2dw7x3L4urtvQTH6ea8I14R0wiiCVOKmj0bhbqqJoM3G0qjhxrqFUYxSBwZAkfrrpEPku\n4ZoN1iiO2lLLNdTeb1xDqaRjwB9x6qhDTVSKwK4qTkDn0XRhFIHBkARGAuP8cvNhLls7n7oyyxJw\n57uoKXEb11CK8Q5GXkzmUFXipnc4gNVdf2YS2Xk0XRhFYDAkgd+8cYQB/xjXn7nomPW68iLjGkoh\nqkp7vz9qRVBT4iY4rgyOjs2617iGDAbDcagq97x0gBPqS9mwpPqYY/XlhSZrKIUMjo4xEhyP2jXk\nXN33RFBL0DfRgtpYBAaDweaNln62tw5w/ZmLjgtQzi8vmkhnNCQfb5Q1BA7VdpuJSCaV9Q4HyHMJ\n5UXZW59rFIHBkGB+8uJBStx5vP/U46dh1ZUX0TU0yth45L3uDbHjBOajVgRRWAQ9Pqu9RKqLwBLJ\nrIpARO4UEa89n3jysb8WERWRefbvIiLfE5F9IrJVRE4L23uDiOy1bzck9s8wGDKDXl+A32w9wgdO\na6Ss6HifcX15ISGNrqFZogmFlD+7ZzMvvJX7nVCjrSp2cPoNRWIRJLLhXLqIxCK4C7hs8qKILAQu\nAQ6FLV8OrLBvtwA/sPdWYw29PwPYANwmIrPPjDMYsoxfvnqYwFiIj0wKEjvU2xlE7f3pcw/1DAd4\nYmcHT+3ypk2GVOFkaEUbI5hQBBEo7N7hxLaXSAezKgJVfQbomeLQt4HPAeH5VVcB96jFS0CliCwA\nLgWeUNUeVe0FnmAK5WIwZDOhkPK/Lx1iw+JqTpw/dQMy58o0nXEC58vtSP9I2mRIFd6BUcqK8vG4\no/Pfe9x5FOa7Iqou7hvO7vYSEGOMQESuAlpV9Y1JhxqBw2G/t9hr061P9dy3iMhmEdnc2dkZi3gG\nQ1p4Zm8nh3qG+cg7p7YG4OiVacdg+jKHnK6arb25rwhiSR0Fq+lbdUlk/YYSOZQmXUStCETEA/w9\n8KXEiwOqeruqrlfV9bW1tcl4CYMhKfzvSweZV+rmsjXzp91TU1qIS9LbZsKxCFr7cj97qWMw+qpi\nh0j6DakqfcNBKkty3DU0BcuAJcAbInIAaAJeE5H5QCuwMGxvk7023brBkBO09A7z1G4v176jGXf+\n9P9WeS6htqwwza4hyxrpGhrFn8LhJ+nAOzA6EZeJlkgsguHAOIHx0NyzCFR1m6rWqepiVV2M5eY5\nTVXbgYeAj9rZQ2cC/araBjwOXCIiVXaQ+BJ7zWDICe7dZOVMXHdG86x768uL0lpUFv7ldqQvd91D\noZDiHfRTXxG7IphtJsFEn6FcDxaLyH3Ai8BKEWkRkZtn2P4osB/YB/wQ+CSAqvYAXwVesW9fsdcM\nhqynvd/P3S8c4NI182msLJ51f32ai8p6jlEEuese6hkOEBxX6sticw1Vedyz1hH0TbSXyG6LYNZQ\nuqpeN8vxxWH3Fbh1mn13AndGKZ/BkPF8/dFdjIWUv79iVUT768sLefVgb5Klmp5uX4CiAhf+YIjW\nvtQNSE81sdYQONSUuBkcHSMwFprW3eco1WzuPAqmsthgiIsX9nXxmzeO8Inzl7Gw2hPRY+rLiujx\nBRgdS49/vmcowMr55bgktwPGE0PrY3QNVUUwxH7OuIYMBsPUBMZCfOmhHTRXe/j4ecsiftzRATXp\niRP0+ALUlxVSX16U0ymk0Q6tn0xNBEVljmtoLlQWGwyGKbjrhbfZ5x3in963mqKCvIgfV2enM3rT\nNJeg2xegptRNQ2XxnHANOQOBoqUqAkXgWASVxcYiMBjmHG39I3znyb1cvKqeC0+sj+qxR6uLU28R\nhEJK73CA6hI3jZXFOR0s7hgYpabEPWM670xEYhH0+gKUF+WTn5fdX6XZLb3BkCa+/sguxkPKbe9d\nHfVj09lmYsAfZDykVJcU0lBZTFv/CKHQ7FO4shHvQGxVxQ6RWQTBrA8Ug1EEBkPUPL+vi4e3tvHJ\n85dHHCAOp8pTgDvPlRaLwKkhqClx01hVTHBc6RzKzUE57THMKg6nsrgAkdldQ9keHwCjCAyGqAiM\nhfjSr7fTXO3hz89bGtNziAh15YVpaTPhfKlVl7hpsmseWnI0YNwxEP2s4nDy81xUFBfMGizO9owh\nMIrAYIiKO59/m7c6fVEHiCdTX140kdWSSpyGc9UlVrAYoDUHq4uD4yG6ffEpArDep5lmEvT4AhND\nbLIZowgMhghp6x/hextjCxBPxppdnD6LwMoasr4kc7HNROfgKKqxp446VM9SXZwLQ2nAKAKDIWK+\nFkeAeDJ1ZUVpqSNwGs5Vl7gpKyqgvCg/J2sJjlYVxx4jgJn7DQXGQvgC48Y1ZDDMFZ7b28UjW9u4\n9YLYAsSTqS8vYnB0DN/oWAKki5xuX4DSwnwK8y23VmOVJyctAicQnwjX0HQdSPucGgKTNWQw5D5W\nBfF2FtV4uOVdsQWIJ1M/UVSWWqugxxeYGMMI0FhZnJMxAu9gfFXFDs5MAquN2rH02lXFJkZgMMwB\nntzVwf5OH1+8Mr4AcTjpqiU4XhHkZpuJ9n4/eS6ZKAqLleoSN2MhZcB/vOU20XDOuIYMhtznzY5B\nRODcFfMS9pwTIytTrAi6hwLHfDk2VhUzODrGgD+YUjmSTcfAKHVlhbhcEtfzOEpzqkllE64hYxEY\nDLnP/k4fDRXFCbMGAOrS1HhuskUwkUKaY1aBd9A/8R7Hg1M1PFWcwHENVWX5mEowisBgmJX9XUMs\nrS1J6HOWFebjceeltJZAVS1FUHpsjAByL4W0Y8DP/DgzhuBov6GpLIKjLaiNRWAwHMdwYIxfbj48\nZYAt21BV3u70say2NKHPKyIpn1Q2NDpGYDx0THCzMUeLytr74+sz5OB8yU9VXdzrC1BckJdQSzFd\nRDKq8k4R8YrI9rC1fxeR3SKyVUQeEJHKsGNfEJF9IrJHRC4NW7/MXtsnIp9P/J9iyBQe29bO3/5q\nKzuODKRblLjxDo7iC4wn3CIAqCsrTKlrKLy9hMO80kLcea6ccg2NBMYZ8I8lRBHU2NbTVNXFvTnS\nXgIiswjuAi6btPYEsFZV1wFvAl8AEJHVwLXAGvsx3xeRPBHJA/4LuBxYDVxn7zXkII6742B39ve6\nf6tzCICl8xJrEYA9uziFMwm6w6qKHVwuoaGyKKcsgkSljgIUF+RRmO+a0iLIlapiiEARqOozQM+k\ntd+pqpNP9RLQZN+/CviZqo6q6ttYQ+w32Ld9qrpfVQPAz+y9hhzEaaZ2qCf7FcH+Th9AUiwCp81E\nqlxoPRN9ho71nTfkWC1Be39iqorBcuHVlLindg0NB3IiUAyJiRF8DHjMvt8IHA471mKvTbd+HCJy\ni4hsFpHNnZ2dCRDPkGqcqs5cUQTFBXnMT8DV5WTqy4vwB0NT5qgng56wFtThWANqckcRdAwmpqrY\noWpaRRDMiUAxxKkIROQfgDHgp4kRB1T1dlVdr6rra2trE/W0hhTiuDsO54Ii6BpiybySuPPRp+Jo\nCmlq3EPdU8QIwLIIvIOjBMZCKZEj2TjvZ31ZYhRB9UwWwVxXBCJyI/Ae4E/0qG3bCiwM29Zkr023\nbshBvDlmESTDLQRQX+YUlaUmYNzjG6Uw34XHfWyWS2NVMapWd9VcoGPAT1GBi/Li/IQ831SKYDyk\n9I/MrWDxcYjIZcDngPepavh/+0PAtSJSKCJLgBXAy8ArwAoRWSIibqyA8kPxiW7IRFQV76AfESsl\ncWw8e68yR8fGaekdZmmCU0cd5ldYV6ypqiXo9llVxSLHWjdNOZZC2m4PpJn8d8aK028onIGRIKq5\nUVUMkaWP3ge8CKwUkRYRuRn4T6AMeEJEXheR/wZQ1R3AL4CdwG+BW1V13A4sfwp4HNgF/MLea8gx\neoeDBMeVlfVljIeUtv7sHY5+sHuYkMKyJFkEdWWp7Tc0uZjMIdeqizsG/AlzC4HVVG5wdIzRsfGJ\ntYlishwJFs9qO6nqdVMs/2iG/V8Hvj7F+qPAo1FJZ8g6nNS99Yur2N0+yKGe4YS0bU4H+5OYOgpQ\n7M6jvCg/ZTECq73E8Zk0CyYG1GSv0g7HO+DnpKbK2TdGiKM8+4aD1JdbbrVcqioGU1lsSDCOv/sd\ni6uB7I4TvGWnji5JkkUAdi1BimIEkxvOORTm51FbVkhrX/aeKwdVtYbWl8WfOurgVGJ3h00q6/XZ\nfYaMIjAYjse5ul3XVEm+S7JaEezv9FFXVkhpYWKCjlORyqKyyQ3nwrFSSLPfIhjwj+EPhhKWOgph\nHUjDqouNRWAwzIAzaGVBRRFNVcXZrQiS0GxuMnXlqWkzMRIYZyQ4Pr0iqMqNojLnQqQuAcVkDtVT\ndCDtszuPVuZIjMAoAkNC6RjwU16UT1FBHgurPVlbS6CqdupocuIDDvXlRXgH/YRCya0u7rZnFU83\nqMWZVJZsOZKN42ZLZAHgVDMJeoYD5LuEsiRai6nEKAJDQvHaqXsAzdWerLUIenwB+keCLJ2XXIug\nvqyQ4LhO2dQskUzVcC6cxspiAmOhaefzZgvtA4nrM+RQ6XEjMtkiCNjriS80TAdGERgSSseg/xhF\n0DccpH8k+6Zfvd1lBYoT3X56MqkaWTlVw7lwGnKklqAjCa6hPJdQWVxwjEXQ68udYjIwisCQYLz2\niECwFAFkZ6uJZDabC6e+IjWTyqZrOOeQKwNqvAN+yory8bgT67KZ3G8ol9pLgFEEOcPOIwP88X+/\nwMFuX9pkcKqKnR46C7NYEbzVNYQ7z0VTVXJrIFJlEUTiGoLsLyrrGBhNSoPAyR1Ie4cDVBqLwJBJ\nvN3l46N3buKVA728+FZ32uRwqoqd9r/NNdaXaDbGCfZ3+lhU4yEvCc3mwqktTU2/oW5fgII8obxo\n6ivl8uJ8Sgvzs9411D6QmMlkk6nyTFYEwWmVajZiFEGW09Y/wkfu2ERIwZ3vmhikkg4m/LN2eX95\nUQFVnoIsVQTJTx0F65zVlLiTXkvQ67NcGdMFN0VkInMom/EO+BMaH3CoKXVPBPRVNaeG0oBRBFlN\njy/AR+7YxMBIkHs+toGl80omqmHTgXeiD/zRf8RszBwaGw9xqCd5zeYmU1delPQ2E90zFJM5NFQW\nZbVrKBRSvIPJcQ1VeazGc6qKLzBOcFxNsNiQfgb9QW788cu09I5wxw3rWdtYwbLa0oywCMJN84VZ\nqAgO944QHNekp446WJPKkhws9o1OmzHk0FhVzJEsbkXd7QswFtKkuIaqS9yMhZQB/9hE9pAJFhvS\nij84zp/ds5mdRwb4wUdO44ylNYDVJfNwz/AxXRJTSadtEdSWHWsRtPZmVzvqiWZzKbII6suKkt6K\nerqGc+E0VBbTNxzEN5qaiWmJ5uiFSOJdQ4411eMLhHUeNYrAkCaC4yE+de9rbHq7h//40MlceGL9\nxLFldaWENH1D4zsG/FQUF1BUcHTwSXO1h7Esa0ftpI4mq/30ZOrLC+kaGk2qsnRmEcxEY5bXEjid\nb+uSZBGAowichnPGNWRIA6GQ8rlfbeXJXV6+8r41XHXKsWOfneKnt7zpcQ91DPgnaggcsrGWYH/X\nENUl7pQFA+srilCFrqHkVPUGxkIM+sdmjRE0VWW3IkhGewmHcEXQZ1sEJlhsSDmqylce3skDW1r5\nm0tO4Pp3Lj5uzxLbp52uOIF3cPQ4/6xTS5BNcYK3On0piw/A0dm6yaolcFwZsweLs7uWoN22OmsT\n2ILaIbzf0NEYgbEIDCnmO0/u5a4XDvCn5yzh1guWT7mnpDCfBRVFE66NVOMdGD0udW9BRVHWtaPe\n3+mbUKqpINlFZU4f/dlcQ3Vl1rnK1upi76CfeaVuCvIS/7UW3oG0x3YNVRTnjiLIjdZ5OU5L7zDf\n3biXq09t5B+uXDVjo6t0ZQ5NVBVPGhGYn+eiMYvaUQ/4g3QNjaYsUAxHg5sdg8nJHJqtqtghzyXM\nryjKatdQMjKGADzufIoKXPQOB/AHx6koLiA/CQonXUQys/hOEfGKyPawtWoReUJE9to/q+x1EZHv\nicg+EdkqIqeFPeYGe/9eEbkhOX9ObvLc3i4APnH+slm7HS6rtWoJVFPbTnhyVXE4zVnUjjpVPYbC\nqSktxCUkrZZgogX1LOmjYLfJuly9AAAgAElEQVSjzmLXULIUAViTyrqHrGBxLrmFIDLX0F3AZZPW\nPg9sVNUVwEb7d4DLgRX27RbgB2ApDuA24AxgA3CbozwMs/Psvi7qywtZXjf7VerS2lKGRscmUjlT\nxVQ1BA7ZVEvwdpdlTaUqYwisK/HassIJH3eiOWoRzO47tyaVZaci8A76k5I66lBd6qZ3OJBzVcUQ\ngSJQ1WeAnknLVwF32/fvBt4ftn6PWrwEVIrIAuBS4AlV7VHVXuAJjlcuhikIhZQX9nVx9vJ5EfU+\ndzKH9qXYPeRUFU/OGgLLIugdDjLgz/x21Ps7feS5hObq1CkCcEZWJs815BKojMCn3VhVTPuAn2AW\n1X2AlVbdNRQ4zjWZSKo8bitG4AvMSYtgKupVtc2+3w44yeyNwOGwfS322nTrxyEit4jIZhHZ3NnZ\nGaN4ucPOtgF6h4Ocu2JeRPuX1TmZQ6kNGM9kEWRTCun+Th8Lq4px56fW/1tXlrw2E912nyFXBA30\nGiuLCWnyu6EmGscCnl+RPEVQU2K1megbDuZUMRkkIGtILWd0whzSqnq7qq5X1fW1tbWJetqs5Vk7\nPnD2ssgUwfzyIjzuvJTXEjhfYlOl7mWTInircyilgWIHq81EklxDQ7P3GXLI1hTS9iRWFTs4Mwly\nbRYBxK4IOmyXD/ZPr73eCiwM29dkr023bpiF5/d1sbK+LOJqSRFhaW0J+7tSaxF4B0ePqyp2yJZa\nglBIOdCd2hoCh/nlRfQOB2dtD/LqwR7+8cHtUc0W7omg4ZxDY5YWlXkndb5NBjUlboZGxxgOjBvX\nkM1DgJP5cwPw67D1j9rZQ2cC/bYL6XHgEhGpsoPEl9hrhhnwB8d5+UAP50ToFnJYVluacougY2D6\nQF1FcQGVWdCO+kj/CP5gKE0WweyTyoYDY/zFz17nJy8djOq97I6g4ZxDQ0V2TipzqoqTmTUU7g6a\nc8FiEbkPeBFYKSItInIz8K/Au0VkL3Cx/TvAo8B+YB/wQ+CTAKraA3wVeMW+fcVeM8zAKwd6CIyF\nOGd59IqgtW+EkUDqms91DIzOeDVmtaPO7C+XdKSOOjiFeN4Z5hJ898m9tNgumx1HBiJ+7h5f5K6M\nYnceNSXurLMIOgb85Ltk1qK5eAh/7lxzDc1aUKaq101z6KIp9ipw6zTPcydwZ1TSzXGe29dFQZ5w\nxtLqqB7nZA7t7xpiTUNFMkQ7js7B0Rm/QBdWe9gZxZdXOjjadTT1iuBodfHUFsGOI/3c8dzbXH1q\nIw+9cYQdR/q5ct2CWZ93PKT0jQSj+oJsrCqmtS+7gsXtdp+rSALisRL+5V9VYlxDhhTx3N4uTmuu\ninoQt/NFlqpWE05V8UxmeXO1h5beYcaj8G2nmv1dPsoK8yfGR6YS572bqpZgPKR84f5tVHkKuO29\na1heVxqxRdA7HEB19qricBoqimntzWw33mSs9ibJcwvBsQV5uWYRGEWQoXQPjbLjyEDUbiGwms+J\npK75nFNVPFUNgUNztYfguCa973487O/0sbS2JKJ6jURT5SmgIE+mHFl5z4sH2NrSzz++ZzUVngLW\nNFSwsy0yRTBRTBaFcrMsgpGUV6fHQ8eAPyldR8M5xiIwisCQCl6wh9BHGygGKCrIo6mqOGW1BDPV\nEDg4KaSH0jQrIRL2pyl1FKxsL6uW4FjX0JG+Eb75+B7OO6GW953cAMCahnI6B0dnjCc4RNpwLpyG\nymL8wdBE3/1soH2GZIVEUelx41wjVJqsIUMqeG5vF2VF+axrqozp8anMHIpkMlSm1xIMB8Y40u9P\nS+qow+RaAlXlS7/ewbgqX3v/2glLZXVDORBZwDjShnPhNGZZLcHhnmEG/WMTacrJIs8lVHnceNx5\nU6ZJZzNGEWQgqspz+7o4a1kNeTEGv5bOK+XtLl9U+eaxcrS9xPQWwYKKIvIyuB3123bdxZI0BIod\n5lcUHaMIHt/RzpO7OvjsxScc8yXnKIJIgu89TsO5KBRBtg2oeXCLVZJ02dr5SX+tKk9BzrmFwCiC\njORA9zCtfSOcsyL2yupldSWMBMdpS4FPfqaqYof8PBeNlcUczHBFsHReelxDwDGuoQF/kNse2sGq\nBeV87Jwlx+wrLyqgOcIsrG5f9PN1G7JoZKWqcv+WVs5YUk1TVXItAoCaksKccwuBmUeQkTy31+qx\ndG4MgWKH8LGVjqmfLDoGRqn0TF1VHE5zBnchdTKsUjmQZjL15UUMjo7hGx3jm4/vwTs4yu3Xr59y\n0MqahnJ2HOmf9Tl7fAHKi/KjGtZS5SmguCAvK1xDrx/u4+0uHx8/b2lKXu8zF60gMJ66+pxUYSyC\nDOS5fV00VhazqCb2K5wJRZCCzCFrIM3sgbqFGTyXYH+npTCL3enz/Toxlt9ub+cnLx3khncu5uSF\nU8eIVi8o50D3MIOzdHTt9gWoiTIdVkRoqCzKiuriB7a0Upjv4vKTZq+pSATnrJjHhSfWz74xyzCK\nIMMYGw/xwlvdnLsisrbT0zGv1E1ZUX5KagkinQzVXO2hxxeY9csrHezv8qWlkCwc5z380q+3M7+8\niL+5dOW0e9c0WnGCXW2DMz5nNA3nwmms8mS8aygwFuKhN47w7tX1lBflnrsmlRhFkGFsa+1n0D8W\nU9poOCKSsrGVnYOjEQ0MP5o5lFlfMKpq1RCk0S0ERy0CX2CcL79vDaWF03tunYrxnbO4h6JpOBdO\nYxZYBL/f46VvOMjVp03Z0d4QBUYRZBjP7e1CBM6KsO30TKRCEYRCs1cVOzRnaBfSzsFRhkbH0lZD\n4FBfbmVWXbZmPpesmTkDpq6skHml7llTSLt9gZj67zRWFtPtC6S0X1W0PLCllXmlbs6NI6nCYGEU\nQYbx7L4u1jSUx3QVN5lldSV0DFhfcsmidzhgzSqOyiLILEXwVhqbzYVTVlTAz245k29+6ORZ94oI\nqxsqZlQEoZDSOxyra8juQtqfmVZB/3CQjbu8vPfkhqgC4YapMe9gBuEbHWPLoV7OWZ6YKxwnFXJ/\nEq2CiRqCCCyCCk8B5UX5GWcR7O9yms2l1yIAeMfi6hldQuGsXlDOXu8ggbGpx0oO+IOMhzQmReC0\no87UzKGHtx0hMB7i6lOb0i1KTmAUQQbx8ts9BMc1pv5CU7F8Ymxl8hRBJFXF4SyqKck8RdDpo6jA\nxYIk96pJNGsaygmOK3u9UweMnRqCSGcRhOMoxTc7Zg5Gp4sHXmtleV0pa+2guSE+jCLIIJ7d20Vh\nvov1i6sS8nzN1SXkuYS3vMnLHHIKoCKdDNWcgSmk+zuHWDKvNKktjJPBmllaTRxtLxF9D57askIa\nKop4o2X2WoVUc7Dbx+aDvVx9WmNaGgTmIkYRZBDP7+tiw5LqhPUxcee7WFTtmXB9JAOn8VkkWUNg\n1RK09I5kVDvqTEgdjYXFNSV43HnTVhjH0nAunJOaKtjW0hezfMnigS2tiMD7TzHZQonCKIIMwTvg\nZ0/HIGcnyC3ksLS2JKkWQaRVxQ7N1R4C46GkDWqPltGxcQ73DLMszamjseByCasWTF9hHEvDuXDW\nNVVyoHuY/gzqQqqqPLCllTOX1Ey0wjDET1yKQEQ+KyI7RGS7iNwnIkUiskRENonIPhH5uYi47b2F\n9u/77OOLE/EH5ArPv9UFkLD4gMOyWqv5XLKuwL2DfuqjGBieaSmkb3f5CGlmBIpjYU1DObvaBqds\nLug0nItdEVi1CttaM8c99NqhPg52D5vagQQTsyIQkUbgM8B6VV0L5AHXAt8Avq2qy4Fe4Gb7ITcD\nvfb6t+19Bptn93ZRXeJm9YLEBr+W1ZYSGA/RkqSJUx0DoxPzdiMh0xTBxl1eADYsiW4caKawpqGc\nodGxKd/Pbl+AkjhaJq9rtNpbvJFB7qH7X2uhqCB1LSXmCvG6hvKBYhHJBzxAG3Ah8Cv7+N3A++37\nV9m/Yx+/SEykB7DbTu+12k4nOmC5rC65Yyu9A/6IA8UACyqtoqlMCRg/tr2NU5srs9bN4FQYTxUw\n7vEFqI4hY8ihwlPAohoP25IYMG7v9/PAlpaI2qWPjo3z8NY2Llk9P+IUW0NkxKwIVLUV+CZwCEsB\n9AOvAn2q6lQwtQCODdcIHLYfO2bvr5n8vCJyi4hsFpHNnZ2dsYqXVezzDuEdHOXcONtKTIVTS5CM\nFNJQSOkcGo1qMlRBnouGyqKMsAgOdQ+zvXWAK9Zm79XlivpS8l0yZZzAai8R39SudU2VbE2SReAd\n8HPN7S/y2Z+/wSd/+tqsVcxP7+6kfyTIB4xbKOHE4xqqwrrKXwI0ACXAZfEKpKq3q+p6VV1fWzs3\nSsef3WvHB5JQKl9V4qa6xJ0UReBUFUfSeTScTGlH/dj2NiA1A02SRWF+HsvrSqecYdw9FFt7iXDW\nNVZwpN9P5+Do7JujoNcX4CM/2kTn4Ch/es4SHt/ZzrU/fGnG17n/tRbmlRbG1Z7dMDXxuIYuBt5W\n1U5VDQL3A2cDlbarCKAJaLXvtwILAezjFUB3HK+fMzy9x8vSeSVJmxuwLEmZQx12DUEkfYbCyZRa\ngke3t7OuqSLpIw6TzZppWk3E2nAunKMB48RZBYP+IDf++GUOdA9zxw3r+eJ7VvM/HzmdPe0DfOD7\nz7N3iiK2Xl+Ap/d4ueqUBvJNS4mEE887egg4U0Q8tq//ImAn8DTwR/aeG4Bf2/cfsn/HPv6UqmZO\nMnma6B4a5YW3urn8pORdlS6rLU1KLYFTQxBNsBisWoKuoQC+JPZAmo3WvhHeONzH5VnsFnKYapi9\nqtITY8O5Y567sQIR2JqgOMFIYJyb797MjiMDfP/Dp000V7xkzXx+8efvxB8McfUPXuCFfV3HPO7h\nbW0Ex5UPnGrcQskgnhjBJqyg72vANvu5bgf+DvgrEdmHFQP4kf2QHwE19vpfAZ+PQ+6c4fEdHYyH\nlCtPakjaayytLaFrKEDfcCChzxttVbHDRPO5JGUyRcJvt7cDcHkWu4UcpqowHhodIzAeitsiKC3M\nZ3ltaUIUQWAsxCd++iqvHOjhW9ecwsWrjx3wsq6pkgdvPYsFFUV89M6X+dWrLRPHHnithZX1ZRN/\nqyGxxGVjqeptqnqiqq5V1etVdVRV96vqBlVdrqp/rKqj9l6//fty+/j+xPwJ2c0j246wdF4JqxaU\nJe01jk4rS6x7yCkKi9YimEgh7U6fInhsWxurFpSzOAsLySazaoph9vEWk4VzUlMFW1v6iceAHw8p\nn/356/x+Tyf/8oGTeN/JU1/4NFV5+OXHz+LMpTX8zS/f4Fu/28P+ziFeO9THB0xLiaRhnG1ppGto\nlBff6uY96xYk9QOerLGV3kGrqrgwP7o89UTUEgz6gzy2rY1n3ow+s6y938/mg71ckQPWAEw9zD6e\nhnOTObmpkq6hUdr6Y6sGD4WUz//fVh7Z1sYXr1zFtRuaZ9xfUVzAj296Bx9a38T3ntrHn9yxCRG4\n6pTkWc1zHZOMm0Ye295OSOHKdcn9gDdVFVOQJwmvJegYiK6q2KGiuICyGNpRH+z2sXGXl6d2e9n0\ndjfBccWd52LjX58XVcD38R22WyiHipImD7PvGYq94dxkTrIDxltb+qOut1BVvvLwTn75agt/cdEK\n/vTcyIbMF+S5+MYH17GopoR/f3wPZy+vYUFFdtZ6ZANGEaSRR7YeYXldKSfUJ7e9QX6ei8U1JUmx\nCKJ1C4E1VCWSFFJ/cJzXD/fx1G4vG3d1TLi2lteV8rGzl3Daoio+c98Wvv3km3zrQ6dE/PqPbmvj\nhPpSltdlZ1uJqVjTUM5j29sZ9AcpKyqYcA3FGywGa+5BvkvY2tIXdartt594k7teOMDN5yzhLy9e\nEdVjRYRbL1jOmUurjRJIMkYRpAnvoJ9Nb/fwmQtXpMTvuay2lDen6VsfK94BP8tqY8vpXlTjYXfb\nIF1DoxzqGeZQ97D1M+x+ux2DKMgTzlxaw0fOXMSFJ9axqOaoX//GsxZz+7P7+fN3LWPl/NnjLJ2D\no7x8wHrfc4nVdpxgd/sg71hcTc9w4mIERQV5nFBfFnXPoWf3dvK9p/Zx7TsW8sUrV8X8OT99UXa2\n/8gmjCJIE7/d3o4qvGddatwTy+pKeHJXB8HxUEJG+1mziqOrKg5nYbWHR7e1s/5rTx6zPr+8iOZq\nD2cvn0dztYeV88s4Z8W8aVsKfOL8Zdz78iH+/fE93HHD+llf9/Ed1vt+RQ65hSCs1URrv6UIfAEK\n81143IlpaX7ywgoe3daOqkb8hf7otjZKC/P5ylVrTZA3wzGKIE08/EYbK+vLWFGfvGyhcJbOK2Us\npBzqGZ4IHsdD73CAsZBGXUzmcO07mkFhfkURi2o8NFd7aKryRN0grdLj5uPnLePfH9/D5gM9rF88\n89XjY9vbWFpbknR3XKqZPMzeqSpO1BfwSY2V3PfyYQ71DB9jkU1HKKRs3OXlvBNqceebnJRMx5yh\nNNDe7+eVgz1cmSJrAGCZ7Q9/y5uYOEHHRA1BbBbBknklfOGKVdx09hIuPLGe5XVlMXfJvOnsxdSW\nFfKN3+6eMcWxxxfgpf09XLE2uVla6WDyMPse32hcDecm41QYRzqxbPuRfryDo1y0qi5hMhiSh1EE\naeCx7W0pd084E7gSVUvQMVFVnP45vx53Pp+5aAWvHOjl93umTyd9Ymc74yHN6t5CMxE+zL7HF6DK\nkzhFsHJ+Ge58V8QTy57c2YFL4IKVRhFkA0YRpIFHtrZx4vyylGatlBcVUFdWyP4EZQ51xmkRJJpr\n37GQRTUevvHb3dO2NH50WzvN1Z6crU4NH2bfnYD2EuEU5LlYvaA8YovgyV1eTl9URVUCZTAkD6MI\nUsyRvhE2H+xNWZA4nKW1iUshjbWqOFkU5Ln4q3efwO72QR5648hxx/uHgzy/r4vLT5qfc24hh/BW\nE4loQT2ZdU0V7Gjtn3Xa3ZG+EXa2DXDRqvoZ9xkyB6MIUsyj26zWx8kuIpuKZbWlvNXpi6tVgIN3\ncJSqGKqKk8l71zWwekE5//HEHgJjoWOOPbGrg7GQZvXsgdlYXFNCiTuP1w72MhwYT0hVcTjrmirx\nBcZntSo37ramvl1sFEHWYBRBinlkWxtrGspZkoYeN8tqS+kfCdI5FH9v+Y4oJ5OlApdL+NxlKznc\nM8LPXjl0zLHHtrXRWFk8EfTMRZxh9s58i0TUEISzLqzCeCY27upgcY2HZbXZ38dprmAUQQpp6R1m\ny6G+lGYLhePM5XU6b8ZDR4xVxcnmvBNqOWNJNd/buHeizfWAP8ize7u4fG3uuoUcVjeU09o3AiRe\nESyrLcXjzptxYtlwYIwX3urmolX1Of9e5xJGEaQQxy30niS2nJ6JtY0VrG0s595Nh+J2D3UO+GOu\nIUgmIsLnLjuRrqEAdz73NgBP7fISGA/lVG+h6QgPhCcyWAyQ5xLWNlSwdYYK42f3dhEYC5m00SzD\nKIIU8sjWNtY1VdBck76JWB/esIjd7YNsORz7xCmnqjhTMoYmc/qiKt69up7bn9lPjy/AY9vbmF9e\nxKkLK9MtWtJxKowh8RYBWO6hnUcGCI6Hpjy+cVcHZUX5vGOWwj5DZmEUQYo43DPMGy39XJnmq9L3\nndJAiTuP+zYdmn3zNPTEWVWcCv720pX4AmN883d7+P2eTi5bOx+XK/ddFc4we4CaBGcNgdWJdHQs\nxJtTjJMMhZSndns5f2VdQtqYGFKHOVsp4hHbLZTuHjelhfm875RGfrP1CP0jwZiewzsxqzgzLQKA\nE+rLuPq0Ju7ddIjRsVBOTCKLBGeYfb5LKC9OfAeZk5ssq2qqgPHrLX10DQW42LiFsg6jCFLEw1uP\ncPLCyowYlP7hDc34gyEe3NIa0+OdquLaDMsamsxfXrwCd56LeaWFs/YgyiVOX1RFU1VxUoK1i2o8\nlBflT6kINu7qIM8lnH+CUQTZRlyXDCJSCdwBrAUU+BiwB/g5sBg4AHxIVXvtAfffBa4AhoEbVfW1\neF4/WzjQ5WN76wD/cMWqdIsCWOb9SY0V3PfyIT76zkVRf2F0ZoFFANbYw3+++iTc+S7y5oBbyOEL\nV6xi0B+btTcbIsK6psopM4c27vKyflEVFZ6CpLy2IXnEaxF8F/itqp4InAzswhpKv1FVVwAbOTqk\n/nJghX27BfhBnK+dNUy4hdKUNjoV121oZnf7IK8dij5o7FQV12ZosDicPzq9adr5uLlKaWF+Uge5\nnNRUwZ72QfzB8Ym1lt5hdrcP8u7VpogsG4lZEYhIBfAu4EcAqhpQ1T7gKuBue9vdwPvt+1cB96jF\nS0CliGTON2MSeWRrG6c1V9IY5Zi/ZDIRNH45+qBxx6A/46qKDanj5KYKxkLKrrajM5I37rKqiU1b\niewkHotgCdAJ/FhEtojIHSJSAtSrapu9px1wPhmNwOGwx7fYa8cgIreIyGYR2dzZGf1gcochu5go\n3ezvHGJn20BaWkrMhBM0fjiGoLF3YDSjM4YMyeUkO2AcPrHsyV0dLK0tSUvFvCF+4okR5AOnAZ9W\n1U0i8l2OuoEAUFUVkagql1T1duB2gPXr18dU9dQ3HOBd//Y07149n0+cv5Tldckd/hIYC9HaN8KB\nbh+HuoeP+Xm4dwQRuOKkzMta+ZMzmrnv5UM8uKWVG85aHPHjOgZHs8ItZEgODRVFzCt188bhfnin\nddG1aX8PN569ON2iGWIkHkXQArSo6ib7919hKYIOEVmgqm2268drH28FFoY9vsleSzghhT86fSH3\nvnyQ+7e0cNma+Xzy/OWclMA+M/7gOL96tYW7XzjAW51DhDdk9LjzaK72sKKujItX1XP6oqqMHL69\nttEKGt+7KfKg8aA/yKFuHxeeaFwAcxUR4aTGCra1WvGlZ9/sJDAe4qITTbZQthKzIlDVdhE5LCIr\nVXUPcBGw077dAPyr/fPX9kMeAj4lIj8DzgD6w1xICaW6xM2X3ruaWy9Yxo+fP8DdLx7gse3tvOuE\nWm49fxlnLK2J+bl9o2Pcu+kQP3x2P97BUU5eWMmnLlhOc00Ji2s8NNd4qC0tzJo+Kx8+o5kv3L+N\n1w71cfqiqhn3+oPj/Ondmxn0j/HB047z6hnmEOuaKvnDm534Rsd4cpeXiuKCWT8/hswl3oqTTwM/\nFRE3sB+4CSvu8AsRuRk4CHzI3vsoVuroPqz00ZvifO1ZqSkt5G8uXckt5y3lf186yI+efZtrbn+J\ndyyu4pMXLOf8E2oj/sLuGw5w1wsH+PHzB+gfCXL28hq+c80pvHNZTdZ86U/Fe09u4GsP7+TeTYdm\n/EcOjoe49aev8fKBHr5zzSmctXxeCqU0ZBrrmioIqVVY9vQeLxesrCXfVBNnLXEpAlV9HVg/xaGL\nptirwK3xvF6slBcV8Mnzl3PTWUv4+SuHuP2Z/dz041c4cX4ZpzZXsbC6mKYqDwurillY7Tlm6Ld3\nwM8dz73NT186iC8wzrtX1/PJ85dxanNuXP2UFuZz1amN/N+rLXzpPaunzAEPhZS//eUbbNzt5avv\nX8tVpxhrYK7juFnvefEAPb6AyRbKchJfg57BFLvzuPHsJXz4jEU8+HorP3v5EI/vaKfHFzh2X0Ee\nTVXF1JcX8fKBHsbGQ7zv5AY+cf5yVs5PbuA5HXx4QzP3bjrEA1tauPHsJcccU1X+6Tc7ePD1I/zt\npSu5/sxFaZLSkEnUlRWxoKKIx7a3k+8SzltZm26RDHEwpxSBgzvfxYfWL+RD663YtW90jJbeEQ73\nDHO4d3ji/pH+ET54WhMfP28pi2pyNy1ubWMF65oquO/lw9xw1uJjXF3ffuJN7nnxILe8aymfPH9Z\nGqU0ZBrrmipo6/dzxtJqyotMNXE2MycVwWRKCvNZOb8sJ6/2I+XDG5r5/P3beO1QL6cvsvry3PHs\nfr731D6uWb+QL1x+YlbHQgyJZ11TJY/v6OAik0GW9ZjojgGwgsalhfn81G5P/YvNh/naI7u44qT5\n/PPVJxklYDiOC0+sY2ltCZdnYI2MITqMRWAALKvoqlMa+NWrLZyxpJov3L+Nc1fM49vXnDKnGrYZ\nImfVgnKe+uvz0y2GIQEYi8AwwXUbmhkdC/F3/7eNUxZW8j/Xn276CRkMcwBjERgmWNtYwTuX1tA/\nEuTHN27A4zYfD4NhLmD+0w3HcPfHNpDvkjkx1tFgMFgYRWA4Bne+8RYaDHMN819vMBgMcxyjCAwG\ng2GOYxSBwWAwzHGMIjAYDIY5jlEEBoPBMMcxisBgMBjmOEYRGAwGwxxHrHkxmYmIdGJNOZuKeUBX\nCsWZCSPL8WSKHGBkmY5MkSVT5IDckWWRqkY8JCKjFcFMiMhmVZ1qOlrKMbJkrhxgZJmOTJElU+SA\nuSuLcQ0ZDAbDHMcoAoPBYJjjZLMiuD3dAoRhZDmeTJEDjCzTkSmyZIocMEdlydoYgcFgMBgSQzZb\nBAaDwWBIAEYRGAwGwxxnTikCyaAJ7JkkSyaRKe9LpsgBRpbpyBRZMkUOiF2WOaUIAHe6BQijEkBE\n0j4cSEQqw+6n+0OdKeeoFEBEMmFoc7FzJwPOT7pfP5xMOUdZf37mhCIQkStE5LfAd0Xk+jTLUiEi\njwO/BVDVsTTKcrmI/AH4LxH5gi1PWrIHMuEciUWdiPweuANAVcfTIYstz5Ui8iTwPRH5E1uedJ6f\nXwP/LiLnp0MGW46MOUe5dH5yWhGISL6I/D3wZeA7wLPAFSLy3jSKNQL0AWtF5I8hPVc0IrIB+Cfg\nP7DS1E4TkbVpkCNjzpH9T+y3b+tE5HJbxpT/n4jIJVjn57vAy8CFItKQBjkKROQ/bFn+G+gHrhOR\nM1ItC2TOOcq185PTisC+2t4PXKuqvwUeAo6QJveD/YVfBbwEXAP8P1vO8TSYlGcDz6jqQ8BhYBx4\ny/mHSpU8mXSO7L+9CXgd+DzwJVvGUKplAc4DHlfV3wCbgQJVPZJqIVQ1COwBrlPVx7CuwiuxPi8p\nJ4POUU6dn7T7pxONiE0qv+QAAAoLSURBVNwAHFHVJ+yl+4ExESlQ1UERaQI8KZLlM8BJwIvAj+0v\n/AHgSlW9WES2isiXgPtVdbuISLJMyzBZXlbVHwJPAr8VkSLgA1hfxj/AUgr/mAwZwmTJiHNkvycN\nwCuq+n+qGhKRI8AJwDeBNhH5OLBRVfemSJbXVPUXwCPA70SkALgB2CMiP7RlvT3Jn5U/Ag6r6iZ7\n6S6s8+NW1SMiUgbUJOO1p5AlI85Rzp8fVc2JG9aV9q+ANmArkGevu8L2FAEPAitTIM+NWFf+lwF/\nAP4eWAbUAV+z93wMGAM2278XpEiWf8S6aqgCvgW81963CtgOrMnlc4QVUPss8DzwR8Au+z2qBtYD\nt9n7/gbwAb+xf89PkSx/inWRthy4EzjH3nsF8BiwOEnvS539+ThinwPXFOenCtgIzE/W+cmkczRX\nzk/OuIZUtRf4HdaX2avYJuMkqoAiVd0jIgtF5INJFOki4BtquTv+GigE/hgrRnC5iPwO+AzwFEdb\nbScrcDxZlgLg0/Z7dkLY6+/Gsl4KkyFEppwjtf5jLgC+qKq/wvpHPwV4N9AOnCsijwI3YX0B7Lcf\nmnB3yDSyrAWuUdV9wBIsxQmwDegAknKlqape4NdYFwxtwJ87h8K2LQL6VbVdRJpE5MIkyZIR52iu\nnJ+cUARh/ux7VLUP+D5wtYgsUsuUdFxgS4EyEflLLF90xP26o5DFeU+3AO8BUNXNWF+wS4FzgCew\nXDSnqOolwPkissT+0KVClheARSKyGksR3SEiHuCLWB/ylkTKYcuSEeco7D3ZDJwLYCvIPcDJwKlY\nf/8rqroGuBbr/DQm8fxMJcupIrIC6+ru3+x9NwGNQG8i5Zgky/8DdmIp7CtFZIGqatj5aQTyROTT\nWO6R+UmUJa3naC6dn6xVBOFZAs7JV1W//fMVLBPt6/bvzpX2acA7sUy6K1X1vxMgxzFBVT0atHoe\ncInIu+zfd2B9eMuAL6nqF8Me1qyqb6dQlu22LCeq6rewPti/AlYDV9tXHomWJS3naHJGVth7sg9L\n4Zxk//4M1rnxAh9X1dvs/T3A2araGo8cUcryB6wYSQWWwswXK11yDXC9qg4kSxZVDdrn4gUsC/Ez\n9rpzft4NvBfr/FyhqvcmQJaKcJnSdY6ikCMV52dKWZJ1frJKEYjIBjtoE36SnNziyX/LfwLLRWSN\niNSLSA3wNHCeqn5K44zw27L8EPg7EakNW3f+wfZifflfIyJ5qnoYK9i0SFUDIpLnyKyqvhTL0gLU\nAyvt4zcDH1bV61S1jTiYQRZXKs+RiKwXkZ8AXxKRZWHrzpXTy1iuuEtEJF9Vd2CZ1aeqqt8+PwKg\nqkOxyhGjLDuBhcAG+0vuOuBDqnqNqrYnSRaZpLy7sCyylbaLod5e/xlwiar+RTxfvPbnoVxEHga+\nB0frAcI+t0k/RzHKkZTzM4ssST0/WaMIbFfBA8AX5WjusKMt1XYvFItIqb12yN6/DetKYpGqblfV\nZ+OUI09E/gUr9/55rCvY25wToUeLWwaxcuILgW+KlV1QCXQ7+zTOlLc4ZanC8meiqgHbXZNMWUKp\nOEf2P9N/Av+DZbYvAP7Jfl2Xc+Vk+3c3YwXwP28/fBQ4YB8fj9fNEKcsfmy/t6oOx2ulRSCL2i6G\nQhEptP/+Z7AuILYDvxeRFar6kqo+GY8s9t8UwvpcuoFGEbnGljPf+dym4hzFIUdCz08EsiT3/GgS\nI/+JvGGZO6cCHwT+MMXx27DSENfZv1+HFQT9NxKYjYMVaP0kcIL9eyPWh2Rx2J4vA78ETsT6h7sL\nK2vnf7AzZeaoLKk6Rx8EKu37K4B7AHfY8a8CPwIW2+/LQ1jB6/8hLANjDsryZeAnzjkDPo7lhvlG\nIs9P2OutAn5q/28/BJSl6X3JCDkikCVp5yehf0SC35AznS8V+3cB8rDSCx8FPmOvu7Dy4+8Flk16\n/JJEy2LL4PwzFdo/HwTW2/fXTSGLK/yEGlkSe44mf1bC1i/GquJ+AivnfDXwLluO5WH7Sh3ZjSzH\nyHJx+O8J/Kw4c1AKgB9j+da/C3way/VzTrLel0yRIw5Zwv9/End+EvEkibxhuU8ewTKRvgiU2Ovh\nubIXAW8A86Z4fCKvcifLUjrFnjJbloYpjiXsiiHHZEnIOZrhs+L8U63HCpgBfAX4Z6zAfCrek2yW\nJZn/QyVhx94JfNe+fwvQCfwm/POUqPclU+RIkCwJOz/OLRNjBCXA41iasATrSgU91p/+eyz3xqdh\nom8OIiKa2AZUk2U5d4o9G4AdalX0lYqVUubIksiy91ySJVHnaLrPito/N6vqo/beR7G+AHtsOVxJ\nfk+yWZZk/g+9K+zYIaxsnJ8DnwNeA/apHfhN8PuSKXIkQpaE17NkhCIQkY+KyHkiUq5WpPt24BdY\nAZkzxG7mFJYhMA58DSszpR+rYVpCSrqjkMXJ+KgCDovITcArWEUvGFmSI0ukckzB6VgVmU4AMO5/\nbCNL3LJUYdWJtGPF/z6OlQWzKhGyZIocmSbLlCTaxIjCPBKs4OXTWFkMt2MFSeaF7Tkby0/2kbA1\nF1aO7LP2405Klyz2+k+AEJZfb52RJfGyxPFZKcfKq34Fy7w+zl9uZEmLLNeHrYUfLwWqc0GOTJNl\ntltaLAKxctkVy4/cqqoXAZ/AMk9vd/ap6vNYqWInitXH36OWRhzAKsq6SFW3pUGWcicFEsvX9yFV\nvUlVtxpZEitLHJ+VIrUKexSrt9N7VfXNWOUwsiRUlpW2LCWq2iV2TY2qDqmVl5/VcmSaLBGRbE0z\nSUPmYQWmvoHVxvW9wN1hx11YJtF5kzTid7CKOjqApgyQ5RVblgVGluTIkiA5jgtUG1kyRpaXEyVL\npsiRabJEc0uZRSAi52Hl31ZhlWx/FQgCFzjBXrWu9v/JvjlciZWf/gaWGyjuPjgJkOV1W5a4qnCN\nLEmXI+7+8EaWpMni/D/HW+GfEXJkmixRkyqNg5VZEu4H+z6WqXQj8GqYtpyPFURZbK9dBbzLyDJ3\nZMkUOYwsmS9LpsiRabJELXvKXshq0lTI0R70fwL8i33/day2yGClst1nZJm7smSKHEaWzJclU+TI\nNFmivaXMNaRWP45RPZoD+26sYgmw2reuEqvZ0n1YubNJG5doZMlsWTJFDiNL5suSKXJkmixRk2rN\ngxVMcWG1IF5ury3HqrY7B2g0shhZMkkOI0vmy5IpcmSaLJHe0pE+GsLqp9EFrLM15D8CIVV9ThPQ\n993IkjOyZIocRpbMlyVT5Mg0WSIjHdoHq9lSCHgOuDmdmtDIktmyZIocRpbMlyVT5Mg0WSK5OU2o\nUoqINAHXA99S1dGUC2BkyRpZMkWO/9/OHdMAAAMxEOPPuhS6faSzEWS7Lbbsb1nZsbblx0kIANgx\ncToHwB0hAIgTAoA4IQCIEwKAOCEAiBMCgLgHBrtmJu5PEQAAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1160f2908>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(data['date'], data['demand'])\n",
    "plt.xticks(rotation=30)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Part 3\n",
    "0 points possible (ungraded)\n",
    "What is the forecast for demand in January 2015 . . .\n",
    "\n",
    "using a naive model?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "35    1512\n",
      "Name: demand, dtype: int64\n",
      "957.9444444444445\n",
      "1173.6666666666667\n"
     ]
    }
   ],
   "source": [
    "pred_naive = data.tail(1)['demand']\n",
    "print(pred_naive)\n",
    "pred_cumulative = data['demand'].mean()\n",
    "print(pred_cumulative)\n",
    "pred_moving_average = data['demand'][-12:].mean()\n",
    "print(pred_moving_average)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Part 4\n",
    "What is the root mean square error (RMSE) for a next period forecast for these three years of demand . . .\n",
    "\n",
    "using a Naive model?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 143,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "383.728177602\n"
     ]
    }
   ],
   "source": [
    "data['pred_naive'] = data['demand'].shift(1)\n",
    "mse = ((data['demand'] - data['pred_naive'])**2)\n",
    "print(np.sqrt(mse.mean()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "419.885131575\n"
     ]
    }
   ],
   "source": [
    "def myfunc(row):\n",
    "    idx = row.name\n",
    "    pred = data['demand'][:idx].mean()\n",
    "    return pred\n",
    "data['pred_cum'] = data.apply(myfunc, axis=1)\n",
    "mse = ((data['demand'] - data['pred_cum'])**2)\n",
    "print(np.sqrt(mse.mean()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 150,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>month</th>\n",
       "      <th>year</th>\n",
       "      <th>demand</th>\n",
       "      <th>date_str</th>\n",
       "      <th>date</th>\n",
       "      <th>pred_naive</th>\n",
       "      <th>pred_cum</th>\n",
       "      <th>pred_12mv</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>Aug</td>\n",
       "      <td>2014</td>\n",
       "      <td>1746</td>\n",
       "      <td>2014-Aug</td>\n",
       "      <td>2014-08-01</td>\n",
       "      <td>1560.0</td>\n",
       "      <td>856.322581</td>\n",
       "      <td>963.583333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>Sep</td>\n",
       "      <td>2014</td>\n",
       "      <td>909</td>\n",
       "      <td>2014-Sep</td>\n",
       "      <td>2014-09-01</td>\n",
       "      <td>1746.0</td>\n",
       "      <td>884.125000</td>\n",
       "      <td>981.583333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>Oct</td>\n",
       "      <td>2014</td>\n",
       "      <td>1773</td>\n",
       "      <td>2014-Oct</td>\n",
       "      <td>2014-10-01</td>\n",
       "      <td>909.0</td>\n",
       "      <td>884.878788</td>\n",
       "      <td>984.583333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>Nov</td>\n",
       "      <td>2014</td>\n",
       "      <td>2000</td>\n",
       "      <td>2014-Nov</td>\n",
       "      <td>2014-11-01</td>\n",
       "      <td>1773.0</td>\n",
       "      <td>911.000000</td>\n",
       "      <td>1051.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>Dec</td>\n",
       "      <td>2014</td>\n",
       "      <td>1512</td>\n",
       "      <td>2014-Dec</td>\n",
       "      <td>2014-12-01</td>\n",
       "      <td>2000.0</td>\n",
       "      <td>942.114286</td>\n",
       "      <td>1165.666667</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   month  year  demand  date_str       date  pred_naive    pred_cum  \\\n",
       "31   Aug  2014    1746  2014-Aug 2014-08-01      1560.0  856.322581   \n",
       "32   Sep  2014     909  2014-Sep 2014-09-01      1746.0  884.125000   \n",
       "33   Oct  2014    1773  2014-Oct 2014-10-01       909.0  884.878788   \n",
       "34   Nov  2014    2000  2014-Nov 2014-11-01      1773.0  911.000000   \n",
       "35   Dec  2014    1512  2014-Dec 2014-12-01      2000.0  942.114286   \n",
       "\n",
       "      pred_12mv  \n",
       "31   963.583333  \n",
       "32   981.583333  \n",
       "33   984.583333  \n",
       "34  1051.000000  \n",
       "35  1165.666667  "
      ]
     },
     "execution_count": 150,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "419.885131575\n"
     ]
    }
   ],
   "source": [
    "mse = (data['demand'] - data['pred_cum'])**2\n",
    "print(np.sqrt(mse.mean()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 155,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def myfunc(row):\n",
    "    idx = row.name\n",
    "    if idx <=11:\n",
    "        return None\n",
    "    return data['demand'][idx-12:idx].mean()\n",
    "\n",
    "data['pred_12mv'] = data.apply(myfunc, axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "423.32999164800941"
      ]
     },
     "execution_count": 156,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "error = data['demand'] - data['pred_12mv']\n",
    "np.sqrt((error**2).mean())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## PP2: Forecasting Ordroid Demand\n",
    " Bookmark this page\n",
    "You have just been hired by a company that manufactures mid-range communication devices that use the Ordroid open source operating system.  The company is focused on innovating its products and has not put much thought on its inventory or forecasting capabilities.   Your boss thinks there might be a problem in the forecasting of the Ordroid Devices and wants you to figure it out.  The Ordroid, far from being new to the market, has been out for two years. \n",
    "\n",
    "Knowing this, you have asked for data on both years of historical sales as well as any forecasts, promotions, pricing changes, or competitive analyses made during this time.  Your boss laughs and provides you with all the data they have: the last six months of sales.  You ask to meet with the current demand planner for the Ordroid Devices and she tells you that they use a forecasting algorithm of her own design and there is no documentation.  \n",
    "\n",
    "Download the spreadsheets with the data here:\n",
    "\n",
    "In Excel format (link to Ordroid_Data.xlsx)\n",
    "\n",
    "In LibreOffice format (link Ordroid_Data.ods)\n",
    "\n",
    "### Part 1\n",
    "\n",
    "What can you say about the presence of seasonality in the demand?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 182,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>month</th>\n",
       "      <th>actual</th>\n",
       "      <th>forecast</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>May</td>\n",
       "      <td>1509</td>\n",
       "      <td>1900</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>June</td>\n",
       "      <td>1610</td>\n",
       "      <td>1200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>July</td>\n",
       "      <td>1708</td>\n",
       "      <td>2100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>August</td>\n",
       "      <td>1866</td>\n",
       "      <td>1300</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>September</td>\n",
       "      <td>2092</td>\n",
       "      <td>2500</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       month  actual  forecast\n",
       "0        May    1509      1900\n",
       "1       June    1610      1200\n",
       "2       July    1708      2100\n",
       "3     August    1866      1300\n",
       "4  September    2092      2500"
      ]
     },
     "execution_count": 182,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_excel('Ordroid_Data.xlsx', names=['month', 'actual', 'forecast'])\n",
    "# data['date'] = data['month'].apply(lambda x: '2016' + x)\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data['date'] = pd.to_datetime(data['month'], format='%B')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 180,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1163fbe10>]"
      ]
     },
     "execution_count": 180,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD8CAYAAAB6paOMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAIABJREFUeJzt3Xd4VFX6wPHvSaUnhIQeCB1CDwFC\nB0GKoujasBErq2JddRXdXXf1Z3fdtSMqKqvShChWRKQqCYTQEmqooZfQIf38/jg3GmN6ZuZOeT/P\nM08md+7c+96U+87pSmuNEEII3+VndwBCCCHsJYlACCF8nCQCIYTwcZIIhBDCx0kiEEIIHyeJQAgh\nfJwkAiGE8HGSCIQQwsdJIhBCCB8XYHcAZQkPD9dRUVF2hyGEEB5lzZo1x7TWERXd360TQVRUFMnJ\nyXaHIYQQHkUptacy+0vVkBBC+DhJBEII4eMkEQghhI+TRCCEED5OEoEQQvg4SQRCCOHjJBEIIYSP\nk0QghHB/5zMh5X8gS+s6hSQCIYT7+/k1mH8v7FpmdyReSRKBEMK9aQ1pCeZ5ysf2xuKlJBEIIdzb\ngRQ4uQfqNYfNX5lqIuFQkgiEEO4tLQH8AuFPUyE/B9bPtDsiryOJQAjhvrSGtC+gzTCIGgDNekHK\ndGk0djBJBEII97UvGU5lQOc/me9j4uHoZrNdOIwkAiGE+0qbB/5B0PES832XP0FgbUj5yNawvI0k\nAiGEeyooMNVCbUdAjRCzLbgudL0KUudB1ml74/MikgiEEO4pIwnOHIDOV/5+e0w85J6H1Ln2xOWF\nJBEIIdxTWgIE1IAOY36/vVkvaNjZNBoLh5BEIIRwPwX5sOkLaHexqQ4qSimImWDGFxzaaE98XkYS\ngRDC/exdCWcP/7FaqFC3a8E/WEoFDlJuIlBKRSqlFiulNiml0pRSDxR7/WGllFZKhVvfK6XU60qp\ndKXUBqVUTJF945VS261HvOMvRwjhFVLnQUBNaD+65NdrhUH05bBhFuRecG1sXqgiJYI84GGtdTQQ\nB0xSSkWDSRLASGBvkf3HAO2sx0TgHWvfMOApoC/QB3hKKVXfQdchhPAW+XmweT60HwVBtUvfLyYe\nsk7Bpvmui81LlZsItNYHtdYp1vMzwGagmfXyf4C/AkWH+Y0DpmsjEQhVSjUBRgELtdaZWusTwEKg\nlHQvhPBZe1bAuaNmzEBZogZCWGuZiM4BKtVGoJSKAnoCSUqpccB+rfX6Yrs1AzKKfL/P2lba9uLn\nmKiUSlZKJR89erQy4QkhvEFaghk01vbisvcrbDTe8zMcS3dNbC5UUOC6aTQqnAiUUnWAucCDmOqi\nJ4B/ODogrfVUrXWs1jo2IiLC0YcXQriz/FxT1dNhDATVKn//7jeA8veqUkF2Xj5PfZnKY3M3uOyc\nFUoESqlATBL4VGs9D2gDtALWK6V2A82BFKVUY2A/EFnk7c2tbaVtF0IIY9cyuJBZem+h4uo2Mklj\n/QzIy3FubC6QkXmea6es5OOVe6hXM9BlpYKK9BpSwAfAZq31qwBa641a64Za6yitdRSmmidGa30I\nmA9MsHoPxQGntNYHgQXASKVUfauReKS1TQghjLR5EFTXTCtRUTHxpk1h23fOi8sFftx0mLFvrGDn\nsXNMuakXfx8bjZ+fcsm5AyqwzwDgZmCjUmqdte0JrfW3pez/LXAJkA6cB24F0FpnKqWeAVZb+z2t\ntZYVJoQQRl6OWXim4yUQWKPi72s7HOo1M2MKosc5Lz4nyc0v4JUftvLu0p10blqPt2+MoWWDMnpL\nOUG5iUBrvQIoMy1ZpYLC5xqYVMp+04BplQtRCOETdi4x3UE7l9NbqDg/f+h5Eyx9CU7uhdAWTgnP\nGQ6dyuK+GSms3n2CG/u24O9jo6kR6O/yOGRksRDCPaTNg+AQswhNZfW8yXxd+6ljY3Ki5duPcunr\ny0k7cJrXxvfg2Su72pIEQBKBEMId5GXDlm+g01gICK78+0NbQJuLYO0nZp4iN5ZfoPnPwm1MmLaK\nBnWCmH/vAMb1+ENPepeSRCCEsF/6Isg+XfHeQiWJmQCn98GOnxwXl4MdO5tN/LRVvLZoO1f2bMYX\nkwbQtmHd8t/oZBVpLBZCCOdKS4AaodB6aNWP0eESqBUOaz4ys5a6mVW7MrlvRgonz+fy0lXduCa2\nOaZTpv2kRCCEsFfuBdj6LXS6DPwDq36cgCDocT1s+x7OHHZcfNVUUKCZsnQH17+XSK2gABLuGcC1\nvSPdJgmAJAIhhN3Sf4Scs+XPLVQRMfFQkGcGmLmBk+dzuHN6Mi98t4XRnRsz/94BRDetZ3dYfyCJ\nQAhhr9R5UKsBRA2u/rHC20GL/mZMgXbdXD0lWZdxkktfX8Gy7Uf51+WdefOGntStUY0SjxNJIhBC\n2CfnvKnK6XQ5+DuoybJXPGTuMJPR2UBrzUc/7+KaKb8AMOeu/sT3j3KrqqDiJBEIIeyzfYFZiL46\nvYWK63S5GY+wxvUT0Z3JyuXez9byz682MbhdBN/cP5AekaEuj6OyJBEIIeyTlgC1I8zaAo4SVMss\nZbnpS7hwwnHHLcemA6e5/M2f+T7tEJPHdOS9CbGE1gpy2fmrQxKBEMIe2Wdh2w9mfiA/B4+ojZkA\n+dmwYbZjj1sCrTWzVu/lyrd/5nxOHjPujOPPQ9q4bMI4R5BEIISwx7bvIe9C5ecWqogm3aBpT1M9\n5MRG4/M5eTw8Zz2Pzd1I76gwvrl/EH1ahTntfM4iiUAIYY+0BKjTGFr0c87xYybAkTTYn+KUw6cf\nOcMVb/1Mwtr9PDiiHR/f1ofwOlWYHsMNSCIQQrhe1mnYvhA6XwF+TroNdbkaAms5ZfWyL9ft5/I3\nf+b42Rym39aHB0e0x9+DqoKKk0QghHC9rd+ZOnxnVAsVqlHPHD91rmmPcICs3HyeTNjIAzPX0blp\nPb65fxCD2nn+krqSCIQQrpeWYBaTad7bueeJmWBGLafNq/ah9hw/x1Xv/MKnSXu5a0gbZtwZR+OQ\nSiyg48YkEQghXOvCSTOtROcrnVctVCiyD0R0rPaYgu9TDzH2jRXsO3GB9yfE8viYjgT4e8/t03uu\nRAjhGbZ+CwW5jh1EVhqlTKlgfzIcTqv023PyCnjm603c9ckaWofX5uv7BjIiupETArWXJAIhhGul\nzoOQFtCsl2vO1208+AeZ+Ycq4cDJC4yfupIPVuzilv5RzL6rH5FhtZwUpL0kEQghXOd8JuxcbHoL\nuWrundoNoONYWD8TcrMq9JbFW49w6evL2Xb4LG/e0JN/Xt6Z4AB7lpF0BUkEQgjX2fK1mSbaEVNO\nV0aveMg6CZu/KnO3vPwCXlmwlVs/XE2jejWYf+8AxnZr6qIg7VNuIlBKRSqlFiulNiml0pRSD1jb\nX1ZKbVFKbVBKJSilQou8Z7JSKl0ptVUpNarI9tHWtnSl1OPOuSQhhNtKS4D6UdCkh2vPGzUYQluW\nOabgyOksbvogiTcXpzO+dyRfTBpA64g6LgzSPhUpEeQBD2uto4E4YJJSKhpYCHTRWncDtgGTAazX\nxgOdgdHA20opf6WUP/AWMAaIBq639hVC+IJzx2DnUtO339VTMvv5mUbj3cvh+I4/vPzLjmNc8voK\n1mWc5JVruvPCVd2oEei9VUHFlZsItNYHtdYp1vMzwGagmdb6B611nrVbItDcej4OmKm1ztZa7wLS\ngT7WI11rvVNrnQPMtPYVQviCzV+BzndNb6GS9LgRlD+s/d+vmwoKNG/+tJ2b3k8ipGYAX04ayNW9\nmpdxEO9UqTYCpVQU0BNIKvbSbcB31vNmQEaR1/ZZ20rbLoTwBWnzoEFbaNzVnvPXawLtR8HaTyE/\nl8xzOdz60Wpe+WEbY7s1Zf69A+nQuK49sdmswksCKaXqAHOBB7XWp4tsfxJTffSpIwJSSk0EJgK0\naNHCEYcUQtjt7BHYvQIGPez6aqGiYibA1m9J/3kuN/8cwfGzOTx7ZRdu6NPCrVcQc7YKlQiUUoGY\nJPCp1npeke23AGOBG7X+da7X/UBkkbc3t7aVtv13tNZTtdaxWuvYiAjPn8NDCIFZJEYXOHduoQrQ\nbUdwLjiCvT9OIdDfj3n39OfGvi19OglAxXoNKeADYLPW+tUi20cDfwUu11qfL/KW+cB4pVSwUqoV\n0A5YBawG2imlWimlgjANyvMddylCCLeVlgDhHaBhJ9tCOHUhl7s+W8+0cwMY6reer+Nb06VZiG3x\nuJOKlAgGADcDFyml1lmPS4A3gbrAQmvbFACtdRowG9gEfA9M0lrnWw3L9wILMA3Os619hRDe7PRB\n2POLGTtg0yfvjftOMfaN5SzafISIwXfgRwH1tsyyJRZ3VG4bgdZ6BVDSb+/bMt7zLPBsCdu/Let9\nQggvtOlLQNvSW0hrzadJe3n6q000qBPErD/3o1fL+nBoKKT8DwY94vyJ7zyA/ASEEM6VlgANO0NE\nB5ee9lx2Hg/OWsffvkilX5sGfHP/IJMEAGLi4dReM92FkEQghHCiU/sgI9HlpYGth85w+Zsr+Gr9\nAR4d1YEPb+lNWO2g33boeCnUDHPK6mWeqMLdR4UQotI2fWm+ujARzF2zjye/2Eid4EA+uaMv/duE\n/3GngGDocQMkvQtnj0Id3+6hKCUCIYTzpM4zA8jC2zr9VFm5+Tz2+QYenrOeHpGhfPvAwJKTQKGe\nN5t1EdbPcHps7k4SgRDCOU7sMQvCuGDswM6jZ7nirZ+ZlZzBvcPa8sntfWlYt5xlJBt2hMi+Zp2C\nX4dB+SZJBEII59j0hfnq5GqhbzYc5PI3f+bw6Sw+vLU3j4zqUPFlJGPi4fh22LvSqTG6O0kEQgjn\nSEuApj0hrJVTDp+dl89TX6Yy6bMU2jWqwzf3D2JYh4aVO0jnKyC4XqVXL/M2kgiEEI6XuRMOrHVa\ntVBG5nmunbKSj1fu4Y6BrZg1sR9NQ2tW/kBBtaHr1ZD2BVw46fhAPYQkAiGE46UVVgtd4fBDL9p8\nmLFvrGDnsXNMuakXfxsbTVBANW5lMRMg7wJsnOO4ID2MJALhudbPMqNDhftJmwfNe0Oo42YQzs0v\n4PnvNnP7x8k0r1+Tr+8byOgujat/4KY9oXE3M6bARxuNJREIz5R1Gr552DxO/WESW2GnY+lwaKND\nG4n3Hj/PDe8l8u7SndzYtwVz7+5Pywa1HXZ8YiaYmA+uc9wxPYgkAuGZ1n0GOWdMP/AVr5a/v3Cd\ntATzNbr61UKnzufy7DebGPHqUtIOnOa18T149squjl9Gsus1EFAT1vjmSGMZWSw8T0E+JE0xfcAb\nRpt/3gEPQmhk+e8VzpeWAJFxEFL1BQhz8gr4JHEPr/+0nVMXcrmmV3P+cnEHGoeUMzagqmqGmvaM\njZ/DqGdNI7IPkRKB8DzbFsCJXdD3rt9WvFr+b7ujEgBHt8KRNDPldBVorfk+9SAj/7OUp7/eRJem\nIXxz3yBeurq785JAoZh4U8osLNH4ECkRCM+T9A7Uaw6dLgf/APMPvOZDGPgQ1G9pd3S+LS0BUOZ3\nU0nrMk7y3DebWbU7k3YN6/DhLb0Z2iHCdauHtYiD8PZmTEHPm1xzTjchJQLhWQ6lwq5l0OdOkwQA\nBv0FlD8se9ne2Hyd1mZuoZYDzELxFbTvxHnun7GWK976mZ3HzvLslV347oFBDOvY0LVLSCplGo0z\nkuDIFted1w1IIhCeJWmKadSLmfDbtnpNIfZW04CcudO+2Hzdkc1wbGuFxw6czsrlhe+2cNG/l7Ig\n7RD3DmvLkkeHcWPflhWfIsLRul8PfoE+N9JYEoHwHOeOwYbZ0ON6qBX2+9cGPgT+gbDsFXtiE2bs\ngPKD6HFl7pabX8D0lbsZ+vISpizdwdhuTVj8yFAeGdWBOsE211bXDjdrFayfAXnZ9sbiQpIIhOdI\n/hDys00jcXF1G0PvO8w/8PEdro/N12lt2geiBkKdkuf70VqzcNNhRv13Gf/4Mo32jerw9X0DefXa\nHlWbHsJZYibAhUzY8rXdkbiMJALhGfJyYPX70GZ46UseDngAAmrA0hddG5swg7GOp5c6t9DGfae4\n/r1E7pyeDMD7E2KZcWccXZqFuDLKimk9DEJa+FT1kCQC4Rk2fQFnD0HcPaXvU6ehKRVsnGO6MQrX\nSUswDfbFegsdOHmBv8xax2VvrmDb4bM8M64zCx4czIjoRq5tCK4MPz+IuRl2LoHMXXZH4xKSCIT7\n0xoS3zZd+9pcVPa+Ax4wjclSKnAdrU37QOshULsBAGez83h5wRaGvbKErzce5K4hbVjy6FBu7hdF\noF0NwZXR40bT3rH2E7sjcYlyfyNKqUil1GKl1CalVJpS6gFre5hSaqFSarv1tb61XSmlXldKpSul\nNiilYoocK97af7tSKt55lyW8SsYqM6Vx3z+bT2tlqR1u9kudZ3qxCOc7uA5O7IbOV5KXX8CnSXsY\n+vJi3lq8g9FdGrPoL0N4fExH6tUItDvSigtpBm0vhnWfQn6e3dE4XUVScx7wsNY6GogDJimlooHH\ngUVa63bAIut7gDFAO+sxEXgHTOIAngL6An2ApwqThxBlSnwbaoSYrn0V0f8+CKoDS15wblzCSJ2H\n9gtguX8cY15bzpMJqbQKr80Xkwbw2vieRIbVsjvCqukVD2cOQvpCuyNxunITgdb6oNY6xXp+BtgM\nNAPGAYUzNH0MFHYeHgdM10YiEKqUagKMAhZqrTO11ieAhcBoh16N8D4nM2DzV2b0cEXnf6kVBnF3\nmXaFQ6nOjc/XaU3OhnmsD+rJzTO2k5tfwJSbejH7z/3oERlqd3TV024k1GnkExPRVaqyTikVBfQE\nkoBGWuuD1kuHgEbW82ZARpG37bO2lba9+DkmKqWSlVLJR48erUx4whutfs987TOxcu/rN8ksQbjk\necfHJAA4fDqL16fPJOjsPuZm9+Gpy6L54aEhjO7S2H0bgivDPxB63ADbF8DpA3ZH41QVTgRKqTrA\nXOBBrfXpoq9prTXgkBUdtNZTtdaxWuvYiIgIRxxSeKqcc7DmI+h0WeVnFq1Z3ySDLV/DwfVOCc9X\nncvO49WF2xj68hLqpH9Fngrkkfv+wq0DWlVvpTB31PNm0AWmrcCLVei3ppQKxCSBT7XW86zNh60q\nH6yvR6zt+4Gi/7XNrW2lbReiZOtnQNYpiLu7au+Pu9u0LUhbgUPkF2hmrd7LsFeW8Pqi7QzvGM6E\nkLUEtBtBSFi43eE5R4M2EDXIrIRXUGB3NE5TkV5DCvgA2Ky1LroCyHygsOdPPPBlke0TrN5DccAp\nqwppATBSKVXfaiQeaW0T4o8KCiDpXbOMYGTfqh2jRohpON76LexPcWx8PmbZtqNc+vpyHpu7keb1\nazL37v68OSiPgLMHqjzltMfodQuc3AO7ltodidNUpEQwALgZuEgptc56XAK8AFyslNoOjLC+B/gW\n2AmkA+8B9wBorTOBZ4DV1uNpa5sQf7TjJzi2zQwgq059c58/m2oiaSuokq2HzhA/bRUTpq3iXE4e\nb90Qw9y7+9OrZX0ziMw/GNp7eZ+PjmPN35AXjzQud4YnrfUKoLT/xOEl7K+BSaUcaxowrTIBCh+V\n9A7UaVz95Q5r1IP+98Oif0HGaojs7Zj4vNyRM1n8Z+E2Zq3OoE5wAH+7tBM392tJcIC1RGRBPqR9\nAe0uNj9jbxZYA7qNh+QP4NzxXwfNeRMva9kRXuHoVkj/0UwXERBU/eP1mQi1GsCS56p/LC93ISef\n1xdtZ+jLS/h8zT5u6d+KpY8O445BrX9LAgB7E82UHw5coN6txUyA/BzYMNPuSJxCVigT7idpiqly\niL3VMccLrmPWNF74d3MDaxHnmON6kYICzby1+3llwVYOnc5idOfGPD6mI1HhpYzdSJtnpvLw9mqh\nQo2ioXlvM6agutWVbkhKBMK9nM+E9TOh2zVmughH6X071I6AxVIqKO6X9GOMfWMFj8xZT6N6wcz+\ncz+m3Nyr9CRQkA+bvoT2I02S9RUxE8zCOxmr7I7E4SQRCPeSMh1yz0PfKnYZLU1QbbN4za6lsHuF\nY4/todKPnOH2j1Zzw/tJnLqQy2vje5BwzwD6tAor+427V8C5o6VOOe21Ov/JTF2S4n0jjSURCPeR\nnwer3jP9tht3cfzxY28zUwYs9u0eRMfOZvO3LzYy6r/LWbUrk8fHdGTRw0MY16MZfn4VqPJIS4DA\n2mYKBl8SXAe6XGWuP+uU3dE4lCQC4T62fAWn95W95kB1BNaEQQ/DnhWwa5lzzuHGsnLzeWtxOkNf\nXsKMVRnc1LcFSx4dyl1D2lAj0L/8A4BJ1pvnQ4fREOShk8lVR694U2JNnWt3JA4ljcXCfSS+A/Vb\nQftRzjtHTDys+K9pK4ga5HWNfiUpKNDMX3+AlxdsZf/JC4zo1IjJl3SkTUQV6vd3L4Pzx32nt1Bx\nTWOgURfTaBx7m93ROIyUCIR72L8GMpKsNQcq+Om0KgJrwKC/wN6VsHOx887jJpJ2HueKt3/mwVnr\nqF87kBl3xvF+fGzVkgCYdR6C6pi5+n2RUubDxMF1XjWHlXcmAq1h2wKvq8fzaolTIKiuWRnK2WIm\nQL3mplSgHTJXotvZefQsE6cnc93URI6eyebVa7szf9JA+rWpxmCo/FwzJXiHS0xC9VXdrjFrY3vR\nSGPvTATHd8Bn18HSl+yORFTE6YOmX3rMza4ZpRoQDIMfgX2rzcA1L5J5Lod/zk9j5H+W8XP6MR4d\n1YHFjwzlTzHNK9YQXJadSyDrpPfPLVSemvUhehxsmAM55+2OxiG8MxGEtzU3laQpcGy73dGI8iR/\nYPqmV3bNgerocSOEtvCaUkFWbj5Tl+1gyMuLmb5yN9f1jmTJo8OYNKxtxRuCy5OWAMEh5a8b7Qti\nJkD2KTOewgt4ZyIAuOjvEFgLFjxhdySiLLkXIHmaqW4Ia+W68wYEweBH4UCKqUb0UFprvlp/gBGv\nLuW5b7cQ27I+Cx4czLNXdiWibrDjTpSXDZu/ho6XmhKVr2s5AMLaeE31kPcmgjoNYchfYfsPsO0H\nu6MRpdk4x/RCqeqaA9XR/XqoHwWLn/XIUsGaPZlc+fYv3DdjLXVrBPLJ7X358NY+tGtU1/En27HY\nfAL21d5CxSllSgV7f4Gj2+yOptq8NxGAmYK4QVtTKsjLsTsaUZzWppG4UReIGuj68/sHwpDH4NAG\n2PKN689fRXuOn+OeT9dw1TsrOXjqAi9d3Y2v7xvIwHZOXBwmbR7UCIXWQ513Dk/T4wbwC4C1nl8q\n8O5EEBAEo56H49th1VS7oxHF7VoGR9JMacCu/vxdrzVF/CXPu/UKVLn5BfyQdojbP1rNsFeWsGTr\nUR4a0Z7Fjwzl2thI/KvbEFzmybNgy7fQaaxjZoP1FnUaQocxsG6Gx3/Q9P4BZe1Hmj7PS1+EbtdB\nHVkH2W0kvgO1wqHL1fbF4B8AQx+HeXeakc3R4+yLpQS7jp1jdnIGn6/Zx9Ez2UTUDebPQ9pwa/8o\nGtZzURfO9B8h54zvzS1UETHxpkvt1m+hczXXzrCR9ycCgNHPw9tx8NMzcPnrdkcjwHTx3fa9abC1\nu096l6tg2ctmDqKOl4GfvQXlrNx8vks9yMxVGSTtysTfTzGsQ0Ou6x3JsA4RBPi7OL60BKgZBq0G\nu/a8nqDNRWZMSsrHkgjcXng76HsXrHzLTEfcpLvdEYlVU039au/b7Y7EjGQe8hjMvR02JZjEYIPU\n/aeYtTqDL9bt50xWHi0b1OLRUR24uldzGrnq039xOedh63dmEJV/oD0xuDM/f+h5k6lxOLEH6re0\nO6Iq8e42gqIGP2pWqfruMY/sIeJVsk7B2k/MwKS6je2Oxuh8JUR0giUvmDENLnLqQi7/W7mbsW8s\nZ+wbK5idnMHwjg2ZcWccix8eyqRhbe1LAgDpCyH3nFQLlaXnTebr2k/sjaMafKNEAFAzFIb/A766\n3/SAsOlTnwDWfgo5Z+3pMloaP3/TVjAn3syn0+0ap51Ka03Srkxmr87gm40Hyc4roFOTejw9rjPj\nujcjpJYbffJOnWcW9Gk5wO5I3FdoJLQdbhLB0MedO1eWk/hOIgCTuVe/Dz/8A9qP8c1pdO1WkG9G\nfLfoB0172h3N73W63HRlXfqCKSH4O/bf48iZLOau2c/s5Ax2HTtH3eAAroltznWxLejSrB7K3WZC\nzTlnBtv1vNHhPwuvExMPs282DevOnD3XScqtGlJKTVNKHVFKpRbZ1kMplaiUWqeUSlZK9bG2K6XU\n60qpdKXUBqVUTJH3xCultluPeOdcTjn8/GHMi2bO+59fsyUEn7ftezi5x7TZuBs/P/OJ7ni6Gejm\nAHn5BSzafJg7pyfT7/mfePH7LUTUCebf13Rn1ZMj+L8rutK1eYj7JQEwv6u8CzKIrCLajzYlJw8d\naVyRNP8R8CZQ9ApfAv6ltf5OKXWJ9f1QYAzQznr0Bd4B+iqlwoCngFhAA2uUUvO11iccdB0V17K/\nqe/8+b+mhBAa6fIQfFriOxASCR3H2h1JyTqOhcbdTONf16ur3EC69/h5ZidnMGdNBodPZxNeJ4g7\nBrXi2tjIqk8B7WppCVCnsSm9ibIFBJkBZr+8CWcOuU/bVwWVWyLQWi8DMotvBgqniQwBDljPxwHT\ntZEIhCqlmgCjgIVa60zr5r8QGO2IC6iSi58GFCz8h20h+KSDG2D3cjO5nLtWNSgFw56AE7tg/cxK\nvTUrN58v1+3nhvcSGfzyYt5ekk7npiFMuakXKycPZ/KYTp6TBLLPwPaFZlyFB9Z526LnBND5sO4z\nuyOptKr+Nz4ILFBKvYJJJv2t7c2AjCL77bO2lbbdHqGRMPBBM5q09x0QJQ1hLpH0rpkIMOZmuyMp\nW/vRpv1i2UvQfXy5pYLNB08za3UGCWv3c+pCLpFhNXn44vZcHducJiE1XRS0g239HvKyZMrpyghv\nCy0HmuqhAQ/aPh6lMqoa6d3AQ1rrSOAh4ANHBaSUmmi1OyQfPXrUUYf9o/73m4Eg3z/m0u6CPuvs\nUdg42xSfa9a3O5qyKQVDn4CTe2HdpyXuciYrl8+S9jLuzRWMeW05nyXtZXD7CD69oy9LHxnGfcPb\neW4SANOzrm5TaN7H7kg8S8wd/BETAAAgAElEQVQEU5rcs8LuSCqlqokgHphnPZ8DFP617AeKVro3\nt7aVtv0PtNZTtdaxWuvYiAgnTgcRVAtGPgOHNsLa/znvPMJIngb5Oe7ZSFySdhdDs1hY9oqZghnT\n7TN5dyaPzFlPn2cX8UTCRrJyC3jqsmiSnhjOG9f3ZEDb8OovAGO3CydN75fOV3rUp1q3EH051Ajx\nuEbjqlYNHQCGAEuAi4DC1V/mA/cqpWZiGotPaa0PKqUWAM8ppQo/Co4EJlc5akfpfCWseg8WPQ3R\nV5ixBsLx8rLN4jNtLzajvD1BYVvBJ3/ibOKHfFZwMbNWZ7Dj6DlqB/lzRc+mXNe7Bd3dtcdPdWz9\nziRt6S1UeYE1zZxmaz6GMZlQK8zuiCqk3ESglJqB6REUrpTah+n9cyfwmlIqAMgCCpeW+ha4BEgH\nzgO3AmitM5VSzwCrrf2e1loXb4B2PaVgzAvw7hCzrOXo5+yOyDulJcDZw+41gKwc+QWaZXldiKzR\nhToLX+Tf2Y3o0rIRL13dhku7NqF2sJs2djtC2jzTs6t5rN2ReKaYeDOFyobZEOcZJeBy/5q11teX\n8lKvEvbVwKRSjjMNmFap6FyhSXfoFQ+r3oVet0BEe7sj8i5aQ+LbEN7BI5Y4zMg8z5w1+5iTnMHB\nU1mMqnUV76p/seLiDCKG+8An5AsnYMdP9k4N7ukad4GmMWYiur5/9oifo1QAgrWsZW1YMFnmIXK0\nvYlwcL35ZOSm/xDZefl8veEAN3+QxOCXF/PGT9tp16gub98YwxuTH4CWA4hY+5ZZVtPbbf4aCvJk\nbqHq6hUPRzbB/jV2R1IhXly+rYTa4TD0MbOS2fYfPHKIuNtKfNusbNVtvN2R/MG2w2eYtTqDeSn7\nOHE+l2ahNXlgeDuuiY2kWWiRHj/DnoCPLoXkD6HfPfYF7AppCWb5Tneb/sPTdLkKvn8C1nzkEVVs\nkggK9ZlofmnfT4bWw2QlJkc4uRe2fG266rrJvE7nsvP4esMBZq7OYO3ekwT6K0ZGN+a63pEMaBte\n8kpfUQPNXPwr/mOqD93kWhzu3HHYuQQG3O+2pTePEVzXjMFInWfWQwl2wjrSDiRVQ4X8A82ylpk7\nzKRoovpWTQUU9LnT1jC01qTsPcFjn2+gz7M/8tjcjZzNyuNvl3YicfJw3roxhsHtI8pe7nHoE3Du\niOn95K22fGVGxkpvIceIiTdTeKfOtTuSckmJoKh2I6DdKNODqPt4syapqJrss7BmupmiIKS5LSFk\nnsshYe1+Zq3ey7bDZ6kV5M/Ybk24rncLYlqEVq7bZ8t+pqS44r/Q61YI9pCpIiojdZ5Zv7lxN7sj\n8Q7NY80aFynTTUnSjUmJoLhRz5mh9YuetjsSz7Z+BmSfcnmX0YICzbJtR5n0WQpxzy3ima83USso\ngBf+1JVVT47gpau706tl/ar1/R/2BJw/Bqvfc3zgdjt71MwD1flKqRZyFKVMo/H+NXAotfz9bSQl\nguLC25oeLr+8aZZRlEazyisoMNVrzXpB894uOeWBkxeYk7yP2ckZ7D95gdBagdwU15LrekfSobGD\n6mcj+5hBcT+/BrG3Q4165b/HU2z+EnSBzC3kaN2uM5NbpkyHS16yO5pSSYmgJIMfNT2JZFnLqkn/\n0czpH3ePUz9d5uQV8N3Gg9zy4SoGvPgT//lxG63Ca/PG9T1JemI4/7gs2nFJoNCwyaav/ap3HXtc\nu6V9AeHtoWG03ZF4l1phZsGjDTPduvuxlAhKUiMEhj8F8+81DT1dr7Y7Is+S9A7UbWLaBxwoN7+A\nDftOkbjzOIk7j5O8+wQXcvNpXK8G9w1ryzWxkUSGOblHT7NeZnW7X940Pc1qhDj3fK5w5hDsXgFD\nHpNqIWeImQCpn8Pmr6DbtXZHUyJJBKXpcaO1rOXfocMYCKptd0Se4chmMzL1or9XeVGXQjl5BWzc\nf5LEnZm/u/EDdGxcl+t6RzKkQwSD25XT48fRhj4OU4dA4hQz/sTTbZoPaOkt5CxRg6B+KzP/kCQC\nD+PnZ5a1nDbK9BS56Em7I/IMSVMgoIbpWVNJFbnxx7UOo0+rBoTVtnGcR9MeZiWzlW9B34nuP612\nedLmmSqhhh3tjsQ7+fmZNTgWPQ3H0k07pJuRRFCWFnHQ5Wr45XWzrGX9lnZH5N7OZ8L6WeZTT+0G\n5e7uMTf+kgx93AyWW/m2Z39IOH0A9q6EYX+zOxLv1uNG+OlZWDvdWiHRvUgiKM/FT8PWb2Hh3+Fa\nz5pj3OXWfGQWO+9bcpfRnLwCNuw7SeLO4yTtyizlxt+APq3C3O/GX1zjrqYNJPEd00XWQ6Yb/oO0\nL8xXqRZyrrqNzcp36z5zSLWpo0kiKE9IMxj4ECx+FnYth1aD7I7IPeXnmjaVVkOgkel5UvTGn7gz\nk+Q9mWTlFgC/v/H3bRVGfXe/8ZdkyOOmfn3lmzDcQ9e/TkswSc0Nqyu8Tq942PqNWe8h+nK7o/kd\nSQQV0f8+SPkffP84/HmZLOZdks3z4fR+tvf+Fwt+2l7ijX987xaefeMvrlG0+SSdOAXiJlWoOsyt\nnMyAfas8N4l5mjbDzfKfKdMlEXikwJpmWcs58WaO8djb7I7ILRT9xD8q8WUCdWNGflMDzTY6NanH\n9X3Mjb9PlJfc+Esy9HHzqfqX19yy7rdMm6RayKX8A0xb47KX4dQ+26ZeKYkkgoqKHgctB8KiZ8w/\njqf3FKmCnLwC1u87SeKO4yTuOs6aPSfIyi2gh0rn3uDNfNfiIabE9fbuG39xER2g6zVmydN+90Ed\nJ66z7Wip86BJDwhrbXckvqMwEaz9xHyIcBOSCCrq12UtB8OSF81zL5edl28GcBW78SsFHRv/9ol/\nWOrnsLMeY2562O2n23WKIY+ZAUM//xdGPWt3NBVzYjccSPG8Uoynq98S2gwziWDwo25TzSyJoDIa\ndzWzCK6aar56Wb/rsm78nRrX44Y+La3unGGE1rI+8Z8+AHPnQ9+7fDMJgGlo7XadaSzvf5/pIeLu\n0hLM1+gr7I3DF8VMgDm3wI7FZsZjNyCJoLKGPWmmnVgwGW6a59FD8rPz8lmf8duUDWv2nCA7r5wb\nf3Gr3zeTldm85oDtBj9qFitf8V/PKC2mJUCzWBkbY4cOl0KtBqa9URKBh6odDkMnmx5E27430094\niPJu/Df2rcCNv6ic82b5xg6XmOUNfVmDNtDjekieZlb4qtfU7ohKd3yHWUd6pIdUY3mbgCDofr0Z\nhX/2iFuse1JuIlBKTQPGAke01l2KbL8PmATkA99orf9qbZ8M3G5tv19rvcDaPhp4DfAH3tdae8DH\nplL0vsPcABc8AW0ugoBguyMqUVk3/ugm9bgpruWvvXpCalVhgMvG2XAh08wyKkypYP1MWP4qXPqK\n3dGUrrBaqLNUC9kmJt6MP1k/AwY8YHc0FSoRfAS8Cfw6rFYpNQwYB3TXWmcrpRpa26OB8UBnoCnw\no1KqvfW2t4CLgX3AaqXUfK31JkddiEv5B8Lo5+CTq8zI0oEP2h0RYG786/aeJGlXpnNu/EVpbfrP\nN+4KLfs75gI8Xf0oM5VAysfmb8KNugf+TloCRPZ13/h8QUR7aNHPjCnob/8a0eUmAq31MqVUVLHN\ndwMvaK2zrX2OWNvHATOt7buUUulAH+u1dK31TgCl1ExrX89MBABtR5jpiJe9bIp5dRu5PISs3HzW\nZZwkyZqrJ2WvE2/8xe1cAkc3wxXv2P5H7FYGP2KmEVj+bxj7H7uj+aOj2+BwKox+0e5IRMwE+OJu\n2PMLRA2wNZSqthG0BwYppZ4FsoBHtNargWZAYpH99lnbADKKbe9bxXO7j1HPwlt9zayCV7zl9NNl\n5eazdm/hXD3HSdl7khzrxt+5qbnx920VRt9WDRx/4y8uaQrUjoAuVzn3PJ4mtIX5B0+ZDgMedL/G\n2LQEQDl8rQhRBdFXmMWvUj722EQQAIQBcUBvYLZSyiGjUpRSE4GJAC1atHDEIZ2nQRvod49ZurD3\nbWbREgfKys0nZe8JEndmkrTzOGszzI3fT0HnpiFMsD7x924VRkhNF05idXyHaSgf8rjbto/YatDD\nsPZ/sPwVuPwNu6P5vbR5piqvXhO7IxFBtcxgxHWfminvbRykWtVEsA+Yp7XWwCqlVAEQDuwHIovs\n19zaRhnbf0drPRWYChAbG+v+60QOegTWzTCZ/faF1aomycrNJ2XPCdO4uyuTdXtPkpNvbvxdmoUQ\n38/c+GOjXHzjLy5pCvgHyVQbpQlpZtZjWP0+DPwLhLWyOyLjyGY4ugUuceOGbF/TKx6SP4ANc8za\nFjapaiL4AhgGLLYag4OAY8B84DOl1KuYxuJ2wCpAAe2UUq0wCWA8cEM1Y3cPNerBiKfgy0mwcU6l\nViC6kFP4if84STszWZfx242/a7MQbhkQRVzrMGKjwqhXw02mrb1wEtZ+aqqEbGgX8RgDHzJF/mWv\nuKTasEJS54HyM2voCvfQpLt5pHxsxuLY1N5Wke6jM4ChQLhSah/wFDANmKaUSgVygHirdJCmlJqN\naQTOAyZprfOt49wLLMB0H52mtU5zwvXYo/sN5tPfwn+YPvXBdUrc7XxOHil7fqvjX5dxktx8jb+f\nokuzEG4dEGV94q9PXXe58Re39hPIPWdGEovS1WtiSkxJ78Kgv5hqRDtpbdoHWg6QBO5uYuLhm7+Y\nKT8cXL1cUcrcv91TbGysTk5OtjuMislYBR9cbKqKhv8dMDf+NYVVPTsz2bDvtxt/12Yh9G0dZm78\nLd34xl9UQT683gNCIuHWb+2Oxv2dOQyvdTcNs396195YDm2EKQNNTyap0nMvWafg3x1NbcJlrznk\nkEqpNVrr2IruLyOLHSWyD3mdr8bv59d578wAFhwIZsO+U+QVmBt/t+Yh3D6w9a9VPXWCPfBHv/Vb\nOLlXRqRWVN1G0OcOs7bxoIdN33G7pCWA8pdqIXdUI8TMaLzxc/O/VUqNgjN54N3IfZzLziP510/8\nxzmybxgLA7+iZcrz0Pif3Dm4NXGtG9CrZX3PvPEXl/iO6R7Z8VK7I/Ec/R+A1R/A0hfh6g/siUFr\n0z7QarCZIkW4n5gJpvdQWoJZ6N7FvODu5Dpns/NI3p3562LrG/efIr9AE+Cn6B4ZyrjBsRw+P4nR\nG15l9Og8aO1Fs5MeXA97fjafWNxk6lyPUCcC+kw0XYwHP2rPjLUH18OJXaatQrinyL4Q3sE0Gksi\ncC9nsnKLfOLPJNW68Qf6K7o3D+WuIb994q8VZP0oc/8Kez+H7yebZS39veRHnDgFAmubhTVE5fS/\n33QmWPoCXPOR68+fNg/8AqDjWNefW1SMUqZU8MOTcHjTr+t+u4qX3KUc40xWLsm7f6vq2bj/FAUa\nAv0VPSJDuXtIG+JaNyCmZehvN/7iAmuaT82zb4Y1H3rH9Mxnj5iFV3rdAjVD7Y7G89RuYHpZLX/F\nlAoadXbduQt7C7UeBrXCXHdeUXndr4cf/2lGpbt4KnOfTgSns3J/V9WTWuTG3zOyPpOGtTU3/hb1\nqRlUieqQTpdB1CBY/Kzpb+/p/4DJ0yA/R7qMVke/SWZBoyXPw3WfuO68+1NMA/8Q91kWUZSidgPo\nNBY2zIQR/4TAGi47tU8lglMXclm9K5OkXaaqJ+2AufEH+fvRo0Uo91o3/p6VvfEXpxSMfgHeHQRL\nXoBLXnLcRbhaXrap1mg3yv6+8J6sVhjE3W0ajQ9ugCbdXHPetHngFygN/J4iJt6U4LZ8DV2vdtlp\nvToRnDqfy6rdZp6exF3HSTtwGm3d+Hu2COXei9oR1zqMmBb1qRHo4AbQxl1Mf+3V75sqFRfX+TlM\n6lw4d9TcxET1xN1j2lqWvADXf+b88xUUQNoX0Ha4VOl5ilZDILSlaTSWRFA9B05e4M7pyWw6aN34\nA/yIaRHK/Re1sz7xhzr+xl+SYU+avsHfPw4TvvS86Zq1Nl1GIzpB66F2R+P5aoZC/3tNleGBtdC0\np3PPtz8ZTu+D4f9w7nmE4/j5mV5DP/0fZO6EMIfM5Vn+aV1yFheLqBtMeJ1gHhjejpkT49jw1Ehm\nTuzHQxe3p1+bBq5JAmCqA4Y9AbuWmsFYnmbPL3BoA8Td5XlJzF31vQtqhMLi551/rtR54B/sUcup\nCsziRsoPUv7nslN6ZSII9Pfj49v68OCI9sS1duGNvySxt5tP1AueMPXtniTxbagZBt2uszsS71Gj\nnlnTePsC2OfE6VMKCmDTF9DuYnNO4TnqNTVtcuk/mlK5C3hlInAr/gEw+nk4sdtMNeApTuw2pZhe\nt5guscJx+kw0CXaJE0sFGYlw5qCZukB4nstegzt/cllJXBKBK7QZBh0uNVMSnz5odzQVs+o9Uzzt\nfYfdkXif4LpmwfL0H2FvknPOkZYAATWg/WjnHF84V91GZm10F5FE4Cqj/g8Kcs2ylu4u+4wZ1BJ9\nhVlkRThenzuhVjgsec7xxy7Ih01fQruRtkxgJjyPJAJXCWttBhWt/8y5dcOOsG4GZJ+WLqPOFFTb\nLF6zcwns/tmxx97zC5w9DF3+5NjjCq8licCVBj0MdRqZZS0LCuyOpmQFBWYpyua9oXmFpzMXVRF7\nG9Ru6Pi2grR5EFjLlAiEqABJBK4UXNcMHd+fDBtn2x1NydIXQuYOKQ24QlAtMyPo7uWwa5ljjpmf\nB5vmm7aBoNqOOabwepIIXK3beLMc3cKnTF28u0l8G+o2lQVMXKXXLVC3iRlX4IiugruXw/lj0ltI\nVIokAlfz84PRL8LZQ7D8Vbuj+b3Dm0yddZ87XdpjwacF1jRVhnt/MT/76kpLgKA6ZvyAEBUkicAO\nkb1NyWDlm5C5y+5ofpM0BQJqmk+pwnViJkC9ZrD4ueqVCvJzYfN8M5JYxn6ISpBEYJcR/zSzQv7w\nN7sjMc4dhw2zoPt1nj9ttqcJCDalgn2rYMeiqh9n11K4cAI6S28hUTmSCOxSrwkMfthMN7tjsd3R\nmEV08rKgrzQS26LnzRASWb1SQWoCBNczs40KUQnlJgKl1DSl1BGlVGoJrz2slNJKqXDre6WUel0p\nla6U2qCUiimyb7xSarv1iHfsZXiouElQP8osa5mfZ18c+blmuuzWw+xZU1dAQJBZvWz/Gtj+Q+Xf\nn5cDW74y6w4EBDs+PuHVKlIi+Aj4wzh1pVQkMBLYW2TzGKCd9ZgIvGPtGwY8BfQF+gBPKaXqVydw\nrxBYwyxreXSzWQXMLpu+NPPSxN1jXwwCetxg5qJf/GzlSwU7F0PWKektJKqk3ESgtV4GZJbw0n+A\nvwJF/2LHAdO1kQiEKqWaAKOAhVrrTK31CWAhJSQXn9TxUrMYxeJn4XxJP2YXSHwbGrSFtiPsOb8w\n/ANhyF/h4PrKT1ueOs9Mb916mHNiE16tSm0ESqlxwH6t9fpiLzUDMop8v8/aVtp2UbisZfYZUz/s\nahmrTXVE37tM11Zhr27joX4rM66goqPPc7NM4ug01lQxCVFJlf7PV0rVAp4AnLLskVJqolIqWSmV\nfPToUWecwv00iobet0PyB3A4zbXnTnwbgkOg+/WuPa8omX8ADH0cDm80HQkqYsciMzeUVAuJKqrK\nR8A2QCtgvVJqN9AcSFFKNQb2A5FF9m1ubStt+x9oradqrWO11rERERFVCM9DDZ0MNULMPEQuWoyC\nU/tM+0CvCTJLpTvpcjU0aGfmIKpIqSAtwaxv0GqI82MTXqnSiUBrvVFr3VBrHaW1jsJU88RorQ8B\n84EJVu+hOOCU1vogsAAYqZSqbzUSj7S2iUK1wswax7uXV/yTYHWtfh/QZqEU4T4KSwVHNplVxsqS\newG2fgedLpPR4KLKKtJ9dAawEuiglNqnlLq9jN2/BXYC6cB7wD0AWutM4BlgtfV42tomiup1KzSM\nhgVPmnpfZ8o5D8kfQsexENrCuecSldf5SgjvAEteMOsLlGb7Qsg5K1NOi2qpSK+h67XWTbTWgVrr\n5lrrD4q9HqW1PmY911rrSVrrNlrrrlrr5CL7TdNat7UeHzr+UrxA4bKWJ/eY6SecacMsyDopXUbd\nlZ+/KRUc22qqfkqTNs8scNNyoOtiE15Huom4m9ZDzaf05a/C6QPOOYfWkPgONOkOLeKccw5RfdFX\nmBLikudLHnCYcw62LYDoceZDhBBVJInAHY38PyjIgx//6Zzj7/jJfNKMu8dli2OLKvDzM50IjqdD\n6ud/fH3bAsg9L72FRLVJInBHYa2g/72m+iZjleOPnzTFrIwlNxD313EsNOoKS1/8Y6kgLcGseNey\nvz2xCa8hicBdDfwL1Gns+GUtj203c9n0vkPmpPEEfn4wbDJk7jQfDAplnzG/x+hxpj1BiGqQROCu\nguvAxf+CAymwYabjjps0BfyDzHq5wjN0uMS05yx90UwQCKZaKC9LppwWDiGJwJ11vdYsIv/jPx2z\nrOWFE7DuM+h6DdTxocF6nk4pM8bk5B7z+wMzt1DdphDZ197YhFeQRODOfl3W8jAse6X6x0v5n2lc\n7HtX9Y8lXKvdSLPW9bKXzSJC6Quh8xUyP5RwCPkrcnfNe0H3G8ycQMd3VP04+XmwaipEDYIm3RwX\nn3ANpWDoE3AqA+bEQ36ONPYLh5FE4AlGPGXq9auzrOXWb8xNREoDnqvtcGjex0xDEhJpqg2FcABJ\nBJ6gbmMY/IiZaji9imvaJr5jFj3pMMaxsQnXUQqGPWGeR4+TMSDCYSQReIq4e8w89Que+K3nSEUd\nWAt7V1prDkhXQ4/Weihc87FZ7F4IB5FE4CkCgmHUc3B0C6z+oPz9i0qcAkF1oOeNzolNuI5SppG4\nVpjdkQgvIonAk3QYY5YiXPKc6TlSEWcOQepc6HmTWe9ACCGKkUTgSX5d1vKsWeO4IpKnmXmLZM0B\nIUQpJBF4moYdoc+dsOZDOLSx7H1zs0w1UvvR0KCNa+ITQngcSQSeaOjjUCMUvp9c9rKWqZ/D+WMQ\nd7frYhNCeBxJBJ6oZn24yFrWcvP8kvfR2jQSN4yGVoNdG58QwqNIIvBUvW6FRl1gwd/MurXF7V4B\nhzea0oD0NxdClEESgafy8zfLWp7aC7+UsKxl4jtQq4GZYE4IIcogicCTtRoMnS6HFa/Cqf2/bc/c\nZUYh97oVAmvaF58QwiNIIvB0I5+Bgnz48anftq2aakoMve+wLy4hhMcoNxEopaYppY4opVKLbHtZ\nKbVFKbVBKZWglAot8tpkpVS6UmqrUmpUke2jrW3pSqnHHX8pPqp+FAy4HzbOgb2JkHXaTDfd+U9Q\nr4nd0QkhPEBFSgQfAaOLbVsIdNFadwO2AZMBlFLRwHigs/Wet5VS/kopf+AtYAwQDVxv7SscYeBD\nZpGS7x6DtZ9AzhmIk1lGhRAVU24i0FovAzKLbftBa124knYi0Nx6Pg6YqbXO1lrvAtKBPtYjXWu9\nU2udA8y09hWOEFTbLGt5cJ1ZzSyyr1nERAghKsARbQS3Ad9Zz5sBGUVe22dtK227cJSu15gEkJ8t\nA8iEEJUSUJ03K6WeBPKATx0TDiilJgITAVq0aOGow3o/peDyN2HtdOh4md3RCCE8SJVLBEqpW4Cx\nwI1a/zrPwX4gsshuza1tpW3/A631VK11rNY6NiJCFlivlIj2MPL/wL9a+V0I4WOqlAiUUqOBvwKX\na63PF3lpPjBeKRWslGoFtANWAauBdkqpVkqpIEyDcilzIwghhHClcj86KqVmAEOBcKXUPuApTC+h\nYGChMtMXJGqt79JapymlZgObMFVGk7TW+dZx7gUWAP7ANK11mhOuRwghRCUpXdbslTaLjY3VycnJ\ndochhBAeRSm1RmsdW9H9ZWSxEEL4OEkEQgjh4yQRCCGEj5NEIIQQPk4SgRBC+Di37jWklDoK7KnG\nIcKBYw4Kx1P42jX72vUW8sXr9rVrrs71ttRaV3hErlsngupSSiVXpguVN/C1a/a16y3ki9fta9fs\nyuuVqiEhhPBxkgiEEMLHeXsimGp3ADbwtWv2test5IvX7WvX7LLr9eo2AiGEEOXz9hKBEEKIcrhV\nIlBKTVNKHVFKpRbZ1l0ptVIptVEp9ZVSql6R1yYrpdKVUluVUqOKbB9tbUtXSj1exvnilVLbrUd8\nke1LrPevsx4NnXG9Rc7nLtcdpJSaqpTappTaopS6yhuvVSlVt8jvdp1S6phS6r+OvtZicdh+3db2\n663zbVBKfa+UCnfG9RY5n7tc93XWNacppV70kmv9Xil1Uin1dbHtrZRSSdb7Zykz9X/ZtNZu8wAG\nAzFAapFtq4Eh1vPbgGes59HAesx02K2AHZgprv2t562BIGuf6BLOFQbstL7Wt57Xt15bAsT64HX/\nC/g/67kfEO6t11psvzXAYG//HWOmnT9S+HsFXgL+6QPX3QDYC0RY+30MDPfka7WOMRy4DPi62PbZ\nwHjr+RTg7vJid6sSgdZ6GZBZbHN7YJn1fCFQ+Cl1HDBTa52ttd4FpAN9rEe61nqn1joHmGntW9wo\nYKHWOlNrfcI69miHXlAFudF13wY8b8VUoLV2+OAdN7pWAJRS7YGGwPJqX1wZ3OS6lfWorZRSQD3g\ngKOusSRuct2tge1a66PWfj8WOafDuPha0VovAs4U3Wb9Xi8CPrc2fQxcUV7sbpUISpHGbz+Ia/ht\nyctmQEaR/fZZ20rbXlx5+31oVRv83frhuppLr1spFWp9/4xSKkUpNUcp1ah6l1Bhdv2OwayWN0tb\nH59czKXXrbXOBe4GNmISQDTwQfUuoUpc/ftOBzoopaKUUgGYG2NkCe93Bmdda2kaACe11nmVeb8n\nJILbgHuUUmuAukCOC855o9a6KzDIetzsgnMW5+rrDsCsJf2L1joGWAm84uRzFrLjd1xoPDDDhecr\nyqXXrZQKxCSCnkBTYANmtUFXc+l1W6WDu4FZmJLfbiDfmecsws6/7Qpz+0Sgtd6itR6pte6F+Yfd\nYb20n99n9ebWthK3K+7w5v8AAAGlSURBVKX6FmkcvLyM96O1Lvx6BvgMU1xzKRuu+zhwHphnbZ+D\nqe90Ojt+x2Aa8oAArfUah19UBdhw3T2s8+6wSkCzgf5OuLQy2fQ//ZXWuq/Wuh+wFdjmjGsrzonX\nWprjQKhV8il63HIDdasHEMXvG1saWl/9gOnAbdb3nfl9Y8tOTENLgPW8Fb81tnQu4TxhwC5MY1J9\n63mY9f7CxrRATF3bXd5+3dZrM4GLrOe3AHO89Vqt118A/uVDf9tNgYP81mj6DPBvb7/uYuesD6wD\n2nvytRY5/lD+2Fg8h983Ft9Tbtyu+ieo4A9xhvWHmoup27odeACTvbdZ/7iqyP5PYjLsVmBMke2X\nWPvvAJ4s43y3YeoP04FbrW21Mb1INmDq914D/L39uq3tLTENWxuARUALb71W67WdQEdf+du2tt8F\nbLZ+x18BDXzkumcAm6zHeC+51uXAUeCCdb5R1vbWwCrrZzAHCC4vdhlZLIQQPs7t2wiEEEI4lyQC\nIYTwcZIIhBDCx0kiEEIIHyeJQAghfJwkAiGE8HGSCIQQwsdJIhBCCB/3/2/R9+6QW3L2AAAAAElF\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1163fbe48>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(data['date'], data['actual'], label=\"demand\")\n",
    "plt.plot(data['date'], data['forecast'], label=\"forecast\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## PP3: Call Center Demand\n",
    " Bookmark this page\n",
    "PP3: Call Center Demand\n",
    "The number of service calls made to your firm’s call center over the last six weeks is shown in the table below.\n",
    "\n",
    "\n",
    "\n",
    "### Part 1\n",
    "0 points possible (ungraded)\n",
    "What is the forecast for week 7 using a 2 period Moving Average model?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 214,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "109.0\n"
     ]
    }
   ],
   "source": [
    "x = [83.0, 106.0, 95.0, 91.0, 110.0, 108.0]\n",
    "print(np.sum(x[-2:])/2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 216,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "12\n",
      "[83.0, 106.0, 95.0, 91.0, 110.0, 108.0, 109.0, 108.5, 108.75, 108.625, 108.6875, 108.65625]\n"
     ]
    }
   ],
   "source": [
    "for i in range(len(x), 12):\n",
    "    x_next = (np.sum(x[-2:])) / 2\n",
    "    x.append(x_next)\n",
    "    print(len(x))\n",
    "    print(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 218,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "109.0\n"
     ]
    }
   ],
   "source": [
    "x = [83.0, 106.0, 95.0, 91.0, 110.0, 108.0]\n",
    "x[0] = 110\n",
    "print(np.sum(x[-2:])/2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## PP4: TrainMax\n",
    " Bookmark this page\n",
    "TrainMax is a manufacturer of high-end specialty engine equipment for high speed trains.  They produce parts that are sent to manufacturers for manufacturing new engines.  They need to forecast the demand for a particular part, XC-288. \n",
    "\n",
    "You can download the spreadsheets with the recent demand data for XC-288 from here (link to TrainMax_Data.xlsx).\n",
    "\n",
    "### Part 1\n",
    "0 points possible (ungraded)\n",
    "What is the coefficient of variation of the demand?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 224,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>period</th>\n",
       "      <th>actual</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1027</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1130</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1182</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>1074</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   period  actual\n",
       "0       1    1027\n",
       "1       2    1008\n",
       "2       3    1130\n",
       "3       4    1182\n",
       "4       5    1074"
      ]
     },
     "execution_count": 224,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_excel('TrainMax_Data.xlsx', names=['period', 'actual'])\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 228,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.0547293994391\n",
      "0.05472939943912606\n"
     ]
    }
   ],
   "source": [
    "import scipy.stats\n",
    "var = scipy.stats.variation(data['actual'])\n",
    "print(var)\n",
    "print(np.std(data['actual'])/np.mean(data['actual']))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 229,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>period</th>\n",
       "      <th>actual</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>1110</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>11</td>\n",
       "      <td>1014</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>12</td>\n",
       "      <td>1149</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>13</td>\n",
       "      <td>1121</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>14</td>\n",
       "      <td>1169</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    period  actual\n",
       "9       10    1110\n",
       "10      11    1014\n",
       "11      12    1149\n",
       "12      13    1121\n",
       "13      14    1169"
      ]
     },
     "execution_count": 229,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 230,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1103.7857142857142"
      ]
     },
     "execution_count": 230,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data['actual'].mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 231,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1145.0"
      ]
     },
     "execution_count": 231,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data['actual'][-2:].mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 241,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1113.25"
      ]
     },
     "execution_count": 241,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data['actual'][-4:].mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 266,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>period</th>\n",
       "      <th>actual</th>\n",
       "      <th>fc_naive</th>\n",
       "      <th>fc_cum</th>\n",
       "      <th>f_2ma</th>\n",
       "      <th>f_4ma</th>\n",
       "      <th>fc_2ma</th>\n",
       "      <th>fc_4ma</th>\n",
       "      <th>fc_n</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1027</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1008</td>\n",
       "      <td>1027.0</td>\n",
       "      <td>1027.000000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1027.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1130</td>\n",
       "      <td>1008.0</td>\n",
       "      <td>1017.500000</td>\n",
       "      <td>1103.785714</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1017.5</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1008.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1182</td>\n",
       "      <td>1130.0</td>\n",
       "      <td>1055.000000</td>\n",
       "      <td>1109.692308</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1069.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1130.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>1074</td>\n",
       "      <td>1182.0</td>\n",
       "      <td>1086.750000</td>\n",
       "      <td>1118.166667</td>\n",
       "      <td>1103.785714</td>\n",
       "      <td>1156.0</td>\n",
       "      <td>1086.75</td>\n",
       "      <td>1182.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>1189</td>\n",
       "      <td>1074.0</td>\n",
       "      <td>1084.200000</td>\n",
       "      <td>1117.090909</td>\n",
       "      <td>1109.692308</td>\n",
       "      <td>1128.0</td>\n",
       "      <td>1098.50</td>\n",
       "      <td>1074.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>1043</td>\n",
       "      <td>1189.0</td>\n",
       "      <td>1101.666667</td>\n",
       "      <td>1110.600000</td>\n",
       "      <td>1118.166667</td>\n",
       "      <td>1131.5</td>\n",
       "      <td>1143.75</td>\n",
       "      <td>1189.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>1085</td>\n",
       "      <td>1043.0</td>\n",
       "      <td>1093.285714</td>\n",
       "      <td>1114.666667</td>\n",
       "      <td>1117.090909</td>\n",
       "      <td>1116.0</td>\n",
       "      <td>1122.00</td>\n",
       "      <td>1043.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9</td>\n",
       "      <td>1152</td>\n",
       "      <td>1085.0</td>\n",
       "      <td>1092.250000</td>\n",
       "      <td>1105.375000</td>\n",
       "      <td>1110.600000</td>\n",
       "      <td>1064.0</td>\n",
       "      <td>1097.75</td>\n",
       "      <td>1085.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>1110</td>\n",
       "      <td>1152.0</td>\n",
       "      <td>1098.888889</td>\n",
       "      <td>1114.285714</td>\n",
       "      <td>1114.666667</td>\n",
       "      <td>1118.5</td>\n",
       "      <td>1117.25</td>\n",
       "      <td>1152.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>11</td>\n",
       "      <td>1014</td>\n",
       "      <td>1110.0</td>\n",
       "      <td>1100.000000</td>\n",
       "      <td>1119.166667</td>\n",
       "      <td>1105.375000</td>\n",
       "      <td>1131.0</td>\n",
       "      <td>1097.50</td>\n",
       "      <td>1110.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>12</td>\n",
       "      <td>1149</td>\n",
       "      <td>1014.0</td>\n",
       "      <td>1092.181818</td>\n",
       "      <td>1112.600000</td>\n",
       "      <td>1114.285714</td>\n",
       "      <td>1062.0</td>\n",
       "      <td>1090.25</td>\n",
       "      <td>1014.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>13</td>\n",
       "      <td>1121</td>\n",
       "      <td>1149.0</td>\n",
       "      <td>1096.916667</td>\n",
       "      <td>1113.250000</td>\n",
       "      <td>1119.166667</td>\n",
       "      <td>1081.5</td>\n",
       "      <td>1106.25</td>\n",
       "      <td>1149.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>14</td>\n",
       "      <td>1169</td>\n",
       "      <td>1121.0</td>\n",
       "      <td>1098.769231</td>\n",
       "      <td>1146.333333</td>\n",
       "      <td>1112.600000</td>\n",
       "      <td>1135.0</td>\n",
       "      <td>1098.50</td>\n",
       "      <td>1121.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    period  actual  fc_naive       fc_cum        f_2ma        f_4ma  fc_2ma  \\\n",
       "0        1    1027       NaN          NaN          NaN          NaN     NaN   \n",
       "1        2    1008    1027.0  1027.000000          NaN          NaN     NaN   \n",
       "2        3    1130    1008.0  1017.500000  1103.785714          NaN  1017.5   \n",
       "3        4    1182    1130.0  1055.000000  1109.692308          NaN  1069.0   \n",
       "4        5    1074    1182.0  1086.750000  1118.166667  1103.785714  1156.0   \n",
       "5        6    1189    1074.0  1084.200000  1117.090909  1109.692308  1128.0   \n",
       "6        7    1043    1189.0  1101.666667  1110.600000  1118.166667  1131.5   \n",
       "7        8    1085    1043.0  1093.285714  1114.666667  1117.090909  1116.0   \n",
       "8        9    1152    1085.0  1092.250000  1105.375000  1110.600000  1064.0   \n",
       "9       10    1110    1152.0  1098.888889  1114.285714  1114.666667  1118.5   \n",
       "10      11    1014    1110.0  1100.000000  1119.166667  1105.375000  1131.0   \n",
       "11      12    1149    1014.0  1092.181818  1112.600000  1114.285714  1062.0   \n",
       "12      13    1121    1149.0  1096.916667  1113.250000  1119.166667  1081.5   \n",
       "13      14    1169    1121.0  1098.769231  1146.333333  1112.600000  1135.0   \n",
       "\n",
       "     fc_4ma    fc_n  \n",
       "0       NaN     NaN  \n",
       "1       NaN  1027.0  \n",
       "2       NaN  1008.0  \n",
       "3       NaN  1130.0  \n",
       "4   1086.75  1182.0  \n",
       "5   1098.50  1074.0  \n",
       "6   1143.75  1189.0  \n",
       "7   1122.00  1043.0  \n",
       "8   1097.75  1085.0  \n",
       "9   1117.25  1152.0  \n",
       "10  1097.50  1110.0  \n",
       "11  1090.25  1014.0  \n",
       "12  1106.25  1149.0  \n",
       "13  1098.50  1121.0  "
      ]
     },
     "execution_count": 266,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def f_naive(r):\n",
    "    if r.name-1 < 0:\n",
    "        return None\n",
    "    return data['actual'][r.name-1].mean()\n",
    "data['fc_n'] = data.apply(f_naive, axis=1)\n",
    "\n",
    "\n",
    "def f_cum(r):\n",
    "    return data['actual'][:r.name].mean()\n",
    "data['fc_cum'] = data.apply(f_cum, axis=1)\n",
    "\n",
    "def f_2ma(r):\n",
    "    if r.name-2 < 0:\n",
    "        return None\n",
    "    return data['actual'][r.name-2:r.name].mean()\n",
    "data['fc_2ma'] = data.apply(f_2ma, axis=1)\n",
    "\n",
    "def f_4ma(r):\n",
    "    if r.name-4 < 0:\n",
    "        return None\n",
    "    return data['actual'][r.name-4:r.name].mean()\n",
    "data['fc_4ma'] = data.apply(f_4ma, axis=1)\n",
    "\n",
    "def mape(f, a):\n",
    "    return 100 * np.abs((f-a)/a).mean()\n",
    "\n",
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 267,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "7.084462744930285\n",
      "5.13422811301949\n",
      "6.464208239735962\n",
      "4.792515837044496\n"
     ]
    }
   ],
   "source": [
    "print(mape(data['fc_n'], data['actual']))\n",
    "print(mape(data['fc_cum'], data['actual']))\n",
    "print(mape(data['fc_2ma'], data['actual']))\n",
    "print(mape(data['fc_4ma'], data['actual']))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## PP5: Calculators at the MIT Coop\n",
    "\n",
    "Bookmark this page\n",
    "During your first semester at MIT, you decide to make some pocket money by working a few hours every week at the Kendall Square store of the Harvard/MIT Cooperative (known as The Coop). Since you are a bit of a calculator geek, the store manager of The Coop in Kendall assigns you to their scientific calculator section of the store, and puts you in charge of keeping the most popular calculators on the shelves.\n",
    "\n",
    "A quick look at the inventory the store keeps of different calculator models reveals that they have several boxes of inventory of some models and just a few of others. “What if we run out?” you ask yourself. The realization that keeping the most popular calculators on the shelves is more complicated than just opening boxes from the storage room sets you on a path to analyze the demand of calculators.\n",
    "\n",
    "In order to better understand the demand for different best-selling calculator models, you ask the store manager for recent sales data. She promises she will get you this data. Soon after, you get an email from her with an attachment. “As promised, I have compiled for you the sales data for the past three months, aggregated by week, of our more popular calculator models. I hope this helps. Let me know what you find.”\n",
    "\n",
    "Please enter all your numerical answers with 4 significant figures.\n",
    "\n",
    "Download the spreadsheet with the data here:\n",
    "\n",
    "In Excel format (link CoopCalcData.xlsx here)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 278,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data = pd.read_excel('CoopCalcData.xlsx')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 279,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>t (weeks)</th>\n",
       "      <th>TI-89 Titanium</th>\n",
       "      <th>TI Nspire CX CAS</th>\n",
       "      <th>HP 50G</th>\n",
       "      <th>HP Prime</th>\n",
       "      <th>Casio FX9750</th>\n",
       "      <th>Casio Prizm</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>29</td>\n",
       "      <td>8</td>\n",
       "      <td>24</td>\n",
       "      <td>0</td>\n",
       "      <td>19</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>28</td>\n",
       "      <td>14</td>\n",
       "      <td>22</td>\n",
       "      <td>0</td>\n",
       "      <td>15</td>\n",
       "      <td>29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>28</td>\n",
       "      <td>18</td>\n",
       "      <td>22</td>\n",
       "      <td>0</td>\n",
       "      <td>16</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>29</td>\n",
       "      <td>20</td>\n",
       "      <td>21</td>\n",
       "      <td>0</td>\n",
       "      <td>16</td>\n",
       "      <td>35</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>29</td>\n",
       "      <td>30</td>\n",
       "      <td>20</td>\n",
       "      <td>5</td>\n",
       "      <td>19</td>\n",
       "      <td>40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>28</td>\n",
       "      <td>39</td>\n",
       "      <td>22</td>\n",
       "      <td>12</td>\n",
       "      <td>19</td>\n",
       "      <td>45</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>26</td>\n",
       "      <td>45</td>\n",
       "      <td>21</td>\n",
       "      <td>18</td>\n",
       "      <td>15</td>\n",
       "      <td>49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>26</td>\n",
       "      <td>44</td>\n",
       "      <td>22</td>\n",
       "      <td>28</td>\n",
       "      <td>19</td>\n",
       "      <td>42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9</td>\n",
       "      <td>25</td>\n",
       "      <td>51</td>\n",
       "      <td>22</td>\n",
       "      <td>44</td>\n",
       "      <td>18</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>26</td>\n",
       "      <td>59</td>\n",
       "      <td>22</td>\n",
       "      <td>51</td>\n",
       "      <td>17</td>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>11</td>\n",
       "      <td>30</td>\n",
       "      <td>60</td>\n",
       "      <td>24</td>\n",
       "      <td>64</td>\n",
       "      <td>16</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>12</td>\n",
       "      <td>29</td>\n",
       "      <td>55</td>\n",
       "      <td>21</td>\n",
       "      <td>66</td>\n",
       "      <td>15</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    t (weeks)  TI-89 Titanium  TI Nspire CX CAS  HP 50G  HP Prime  \\\n",
       "0           1              29                 8      24         0   \n",
       "1           2              28                14      22         0   \n",
       "2           3              28                18      22         0   \n",
       "3           4              29                20      21         0   \n",
       "4           5              29                30      20         5   \n",
       "5           6              28                39      22        12   \n",
       "6           7              26                45      21        18   \n",
       "7           8              26                44      22        28   \n",
       "8           9              25                51      22        44   \n",
       "9          10              26                59      22        51   \n",
       "10         11              30                60      24        64   \n",
       "11         12              29                55      21        66   \n",
       "\n",
       "    Casio FX9750  Casio Prizm  \n",
       "0             19           18  \n",
       "1             15           29  \n",
       "2             16           25  \n",
       "3             16           35  \n",
       "4             19           40  \n",
       "5             19           45  \n",
       "6             15           49  \n",
       "7             19           42  \n",
       "8             18           31  \n",
       "9             17           30  \n",
       "10            16           25  \n",
       "11            15           22  "
      ]
     },
     "execution_count": 279,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 286,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1160cf9b0>"
      ]
     },
     "execution_count": 286,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10cea0940>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data.plot(x=0, y=data.columns[1:])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Part 2\n",
    "0 points possible (ungraded)\n",
    "Build a simple exponential smoothing model for the demand of the TI-89 Titanium. Use an alpha value of 0.333. What is your forecast for next week’s (t=13) demand of TI-89 Titanium? (Round your answer to the nearest whole number.) Assume that the forecast for period 1 is equal to the actual demand in period 1, that is, x^0,1 = 29."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 298,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    t (weeks)  TI-89 Titanium  TI Nspire CX CAS  HP 50G  HP Prime  \\\n",
      "0           1              29                 8      24         0   \n",
      "1           2              28                14      22         0   \n",
      "2           3              28                18      22         0   \n",
      "3           4              29                20      21         0   \n",
      "4           5              29                30      20         5   \n",
      "5           6              28                39      22        12   \n",
      "6           7              26                45      21        18   \n",
      "7           8              26                44      22        28   \n",
      "8           9              25                51      22        44   \n",
      "9          10              26                59      22        51   \n",
      "10         11              30                60      24        64   \n",
      "11         12              29                55      21        66   \n",
      "\n",
      "    Casio FX9750  Casio Prizm         c  \n",
      "0             19           18  0.003871  \n",
      "1             15           29  0.005804  \n",
      "2             16           25  0.008701  \n",
      "3             16           35  0.013045  \n",
      "4             19           40  0.019558  \n",
      "5             19           45  0.029322  \n",
      "6             15           49  0.043962  \n",
      "7             19           42  0.065909  \n",
      "8             18           31  0.098815  \n",
      "9             17           30  0.148148  \n",
      "10            16           25  0.222111  \n",
      "11            15           22  0.333000  \n",
      "27.784109830870552\n"
     ]
    }
   ],
   "source": [
    "alpha = 0.333\n",
    "def c(r):\n",
    "    return alpha * (1-alpha)**(12 - r['t (weeks)'])\n",
    "\n",
    "data['c'] = data.apply(c, axis=1)\n",
    "res = (data['c'] * data['TI-89 Titanium']).sum()\n",
    "print(data)\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 300,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "19.864212449141\n",
      "28.468017578125\n",
      "29.059102098981\n"
     ]
    }
   ],
   "source": [
    "def c(r, alpha):\n",
    "    return alpha * (1-alpha)**(12 - r['t (weeks)'])\n",
    "\n",
    "data['c'] = data.apply(lambda x: c(x, alpha=0.1), axis=1)\n",
    "res = (data['c'] * data['TI-89 Titanium']).sum()\n",
    "print(res)\n",
    "\n",
    "data['c'] = data.apply(lambda x: c(x, alpha=0.5), axis=1)\n",
    "res = (data['c'] * data['TI-89 Titanium']).sum()\n",
    "print(res)\n",
    "\n",
    "\n",
    "data['c'] = data.apply(lambda x: c(x, alpha=0.9), axis=1)\n",
    "res = (data['c'] * data['TI-89 Titanium']).sum()\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## Part 4\n",
    "\n",
    "Build a level and trend exponential smoothing model for the demand of the Casio Prizm. Use the following smoothing factors and values to initialize the model:\n",
    "\n",
    "\n",
    "\n",
    "Recall that the Alpha parameter is used for smoothing the level estimate, the Beta parameter is used for smoothing the trend estimate, and the Omega parameter is used for smoothing the MSE of the forecasts. \n",
    "\n",
    "You can download these values in the form of a spreadsheet here:\n",
    "\n",
    "In Excel format (link Prizm-Data.xlsx here)\n",
    "\n",
    "In LibreOffice format (link Prizm-Data.ods here)\n",
    "\n",
    "### Part 4a\n",
    "0 points possible (ungraded)\n",
    "What is your forecast for next week’s (t=13) demand of Casio Prizm in the Kendall Coop store? (Round your answer to the nearest integer.)\n",
    "\n",
    "Enter your answer here:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = pd.read_excel('Prizm-Data.xlsx', skiprows=5, \n",
    "                     names=['col1', 't', 'demand', 'a', 'b', 'x', 'e', 'e2', 'mse_est', 'rmse_est'])\n",
    "data.drop(['col1'], axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>t</th>\n",
       "      <th>demand</th>\n",
       "      <th>a</th>\n",
       "      <th>b</th>\n",
       "      <th>x</th>\n",
       "      <th>e</th>\n",
       "      <th>e2</th>\n",
       "      <th>mse_est</th>\n",
       "      <th>rmse_est</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>18</td>\n",
       "      <td>18.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>25.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>29</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>25</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>35</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>40</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>45</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>49</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>42</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9</td>\n",
       "      <td>31</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>30</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>11</td>\n",
       "      <td>25</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>12</td>\n",
       "      <td>22</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     t  demand     a    b     x    e    e2  mse_est  rmse_est\n",
       "0    1      18  18.0  7.0  25.0  4.0  16.0     16.0       4.0\n",
       "1    2      29   NaN  NaN   NaN  NaN   NaN      NaN       NaN\n",
       "2    3      25   NaN  NaN   NaN  NaN   NaN      NaN       NaN\n",
       "3    4      35   NaN  NaN   NaN  NaN   NaN      NaN       NaN\n",
       "4    5      40   NaN  NaN   NaN  NaN   NaN      NaN       NaN\n",
       "5    6      45   NaN  NaN   NaN  NaN   NaN      NaN       NaN\n",
       "6    7      49   NaN  NaN   NaN  NaN   NaN      NaN       NaN\n",
       "7    8      42   NaN  NaN   NaN  NaN   NaN      NaN       NaN\n",
       "8    9      31   NaN  NaN   NaN  NaN   NaN      NaN       NaN\n",
       "9   10      30   NaN  NaN   NaN  NaN   NaN      NaN       NaN\n",
       "10  11      25   NaN  NaN   NaN  NaN   NaN      NaN       NaN\n",
       "11  12      22   NaN  NaN   NaN  NaN   NaN      NaN       NaN"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>t</th>\n",
       "      <th>demand</th>\n",
       "      <th>a</th>\n",
       "      <th>b</th>\n",
       "      <th>x</th>\n",
       "      <th>e</th>\n",
       "      <th>e2</th>\n",
       "      <th>mse_est</th>\n",
       "      <th>rmse_est</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>18</td>\n",
       "      <td>18.000000</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>25.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>16.000000</td>\n",
       "      <td>16.000000</td>\n",
       "      <td>4.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>29</td>\n",
       "      <td>27.000000</td>\n",
       "      <td>7.660000</td>\n",
       "      <td>34.660000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>16.000000</td>\n",
       "      <td>16.000000</td>\n",
       "      <td>4.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>25</td>\n",
       "      <td>29.830000</td>\n",
       "      <td>6.066100</td>\n",
       "      <td>35.896100</td>\n",
       "      <td>-9.660000</td>\n",
       "      <td>93.315600</td>\n",
       "      <td>31.463120</td>\n",
       "      <td>5.609200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>35</td>\n",
       "      <td>35.448050</td>\n",
       "      <td>5.918243</td>\n",
       "      <td>41.366293</td>\n",
       "      <td>-0.896100</td>\n",
       "      <td>0.802995</td>\n",
       "      <td>25.331095</td>\n",
       "      <td>5.033001</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>40</td>\n",
       "      <td>40.683147</td>\n",
       "      <td>5.692805</td>\n",
       "      <td>46.375952</td>\n",
       "      <td>-1.366293</td>\n",
       "      <td>1.866758</td>\n",
       "      <td>20.638228</td>\n",
       "      <td>4.542932</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>45</td>\n",
       "      <td>45.687976</td>\n",
       "      <td>5.465773</td>\n",
       "      <td>51.153749</td>\n",
       "      <td>-1.375952</td>\n",
       "      <td>1.893243</td>\n",
       "      <td>16.889231</td>\n",
       "      <td>4.109651</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>49</td>\n",
       "      <td>50.076874</td>\n",
       "      <td>5.110404</td>\n",
       "      <td>55.187279</td>\n",
       "      <td>-2.153749</td>\n",
       "      <td>4.638634</td>\n",
       "      <td>14.439112</td>\n",
       "      <td>3.799883</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>42</td>\n",
       "      <td>48.593639</td>\n",
       "      <td>2.934503</td>\n",
       "      <td>51.528143</td>\n",
       "      <td>-13.187279</td>\n",
       "      <td>173.904325</td>\n",
       "      <td>46.332154</td>\n",
       "      <td>6.806773</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9</td>\n",
       "      <td>31</td>\n",
       "      <td>41.264071</td>\n",
       "      <td>-0.452640</td>\n",
       "      <td>40.811431</td>\n",
       "      <td>-20.528143</td>\n",
       "      <td>421.404650</td>\n",
       "      <td>121.346653</td>\n",
       "      <td>11.015746</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>30</td>\n",
       "      <td>35.405716</td>\n",
       "      <td>-2.236526</td>\n",
       "      <td>33.169189</td>\n",
       "      <td>-10.811431</td>\n",
       "      <td>116.887047</td>\n",
       "      <td>120.454732</td>\n",
       "      <td>10.975187</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>11</td>\n",
       "      <td>25</td>\n",
       "      <td>29.084595</td>\n",
       "      <td>-3.584443</td>\n",
       "      <td>25.500152</td>\n",
       "      <td>-8.169189</td>\n",
       "      <td>66.735654</td>\n",
       "      <td>109.710917</td>\n",
       "      <td>10.474298</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>12</td>\n",
       "      <td>22</td>\n",
       "      <td>23.750076</td>\n",
       "      <td>-4.161968</td>\n",
       "      <td>19.588108</td>\n",
       "      <td>-3.500152</td>\n",
       "      <td>12.251065</td>\n",
       "      <td>90.218946</td>\n",
       "      <td>9.498365</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     t  demand          a         b          x          e          e2  \\\n",
       "0    1      18  18.000000  7.000000  25.000000   4.000000   16.000000   \n",
       "1    2      29  27.000000  7.660000  34.660000   4.000000   16.000000   \n",
       "2    3      25  29.830000  6.066100  35.896100  -9.660000   93.315600   \n",
       "3    4      35  35.448050  5.918243  41.366293  -0.896100    0.802995   \n",
       "4    5      40  40.683147  5.692805  46.375952  -1.366293    1.866758   \n",
       "5    6      45  45.687976  5.465773  51.153749  -1.375952    1.893243   \n",
       "6    7      49  50.076874  5.110404  55.187279  -2.153749    4.638634   \n",
       "7    8      42  48.593639  2.934503  51.528143 -13.187279  173.904325   \n",
       "8    9      31  41.264071 -0.452640  40.811431 -20.528143  421.404650   \n",
       "9   10      30  35.405716 -2.236526  33.169189 -10.811431  116.887047   \n",
       "10  11      25  29.084595 -3.584443  25.500152  -8.169189   66.735654   \n",
       "11  12      22  23.750076 -4.161968  19.588108  -3.500152   12.251065   \n",
       "\n",
       "       mse_est   rmse_est  \n",
       "0    16.000000   4.000000  \n",
       "1    16.000000   4.000000  \n",
       "2    31.463120   5.609200  \n",
       "3    25.331095   5.033001  \n",
       "4    20.638228   4.542932  \n",
       "5    16.889231   4.109651  \n",
       "6    14.439112   3.799883  \n",
       "7    46.332154   6.806773  \n",
       "8   121.346653  11.015746  \n",
       "9   120.454732  10.975187  \n",
       "10  109.710917  10.474298  \n",
       "11   90.218946   9.498365  "
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "alpha = 0.5\n",
    "beta = 0.33\n",
    "omega = 0.20\n",
    "\n",
    "def f(r):\n",
    "    idx = r.name\n",
    "    if idx-1 < 0:\n",
    "        return 0\n",
    "    a_p, b_p, x_p, mse_est_p = data.iloc[idx -1].loc[['a', 'b', 'x', 'mse_est']]\n",
    "    x_c = data.iloc[idx].loc['demand']\n",
    "    \n",
    "    a_c = alpha * x_c + (1-alpha) * (a_p + b_p)\n",
    "    b_c = beta * (a_c - a_p) + (1-beta) * b_p\n",
    "    #x_hat_c: represent the current estimation for next time step\n",
    "    x_hat_c = a_c + b_c\n",
    "    \n",
    "    e = x_c - x_p\n",
    "    e2 = e**2\n",
    "    \n",
    "    mse_est = omega * (x_c - x_p)**2 + (1-omega) * mse_est_p\n",
    "    rmse_est = np.sqrt(mse_est)\n",
    "    \n",
    "    data.set_value(index=idx, col='a', value=a_c)\n",
    "    data.set_value(index=idx, col='b', value=b_c)\n",
    "    data.set_value(index=idx, col='x', value=x_hat_c)\n",
    "    data.set_value(index=idx, col='e', value=e)\n",
    "    data.set_value(index=idx, col='e2', value=e2)\n",
    "    data.set_value(index=idx, col='mse_est', value=mse_est)\n",
    "    data.set_value(index=idx, col='rmse_est', value=rmse_est)\n",
    "\n",
    "data.apply(f, axis=1)\n",
    "\n",
    "data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Part 6a\n",
    "0 points possible (ungraded)\n",
    "Build an exponential smoothing approach with damped trends to forecast the demand for the HP Prime. Use the smoothing factors and values found below to initialize the model.\n",
    "\n",
    "\n",
    "\n",
    "You can download these values in the form of a spreadsheet here:\n",
    "\n",
    "•\tIn Excel format (link Prime-Data.xlsx here)\n",
    "\n",
    "•\tIn LibreOffice format (link Prime-Data.ods here)\n",
    "\n",
    "What is your forecast for next week’s (t=13) demand of HP Prime in the Kendall Coop store? (Round your answer to the nearest integer.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = pd.read_excel('Prime-Data.xlsx', skiprows=4, names=['t', 'demand', 'a', 'b', 'x'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>t</th>\n",
       "      <th>demand</th>\n",
       "      <th>a</th>\n",
       "      <th>b</th>\n",
       "      <th>x</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5</td>\n",
       "      <td>5</td>\n",
       "      <td>5.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>7</td>\n",
       "      <td>18</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8</td>\n",
       "      <td>28</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>9</td>\n",
       "      <td>44</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>10</td>\n",
       "      <td>51</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>11</td>\n",
       "      <td>64</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>12</td>\n",
       "      <td>66</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    t  demand    a    b   x\n",
       "0   5       5  5.0  5.0 NaN\n",
       "1   6      12  NaN  NaN NaN\n",
       "2   7      18  NaN  NaN NaN\n",
       "3   8      28  NaN  NaN NaN\n",
       "4   9      44  NaN  NaN NaN\n",
       "5  10      51  NaN  NaN NaN\n",
       "6  11      64  NaN  NaN NaN\n",
       "7  12      66  NaN  NaN NaN"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "alpha = 0.5\n",
    "beta = 0.33 \n",
    "phi = 0.75\n",
    "data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Approach 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "18.4983062744\n"
     ]
    }
   ],
   "source": [
    "a_5 = 5 \n",
    "b_5 = 5\n",
    "x_5_13 = a_5 + b_5 * (np.sum([phi**i for i in range(1, 9)]))\n",
    "print(x_5_13)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Approach 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>t</th>\n",
       "      <th>demand</th>\n",
       "      <th>a</th>\n",
       "      <th>b</th>\n",
       "      <th>x</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5</td>\n",
       "      <td>5</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>8.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>10.375000</td>\n",
       "      <td>4.286250</td>\n",
       "      <td>13.589688</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>7</td>\n",
       "      <td>18</td>\n",
       "      <td>15.794844</td>\n",
       "      <td>3.942389</td>\n",
       "      <td>18.751636</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8</td>\n",
       "      <td>28</td>\n",
       "      <td>23.375818</td>\n",
       "      <td>4.482772</td>\n",
       "      <td>26.737897</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>9</td>\n",
       "      <td>44</td>\n",
       "      <td>35.368948</td>\n",
       "      <td>6.210326</td>\n",
       "      <td>40.026693</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>10</td>\n",
       "      <td>51</td>\n",
       "      <td>45.513346</td>\n",
       "      <td>6.468340</td>\n",
       "      <td>50.364602</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>11</td>\n",
       "      <td>64</td>\n",
       "      <td>57.182301</td>\n",
       "      <td>7.101096</td>\n",
       "      <td>62.508123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>12</td>\n",
       "      <td>66</td>\n",
       "      <td>64.254061</td>\n",
       "      <td>5.901982</td>\n",
       "      <td>68.680548</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    t  demand          a         b          x\n",
       "0   5       5   5.000000  5.000000   8.750000\n",
       "1   6      12  10.375000  4.286250  13.589688\n",
       "2   7      18  15.794844  3.942389  18.751636\n",
       "3   8      28  23.375818  4.482772  26.737897\n",
       "4   9      44  35.368948  6.210326  40.026693\n",
       "5  10      51  45.513346  6.468340  50.364602\n",
       "6  11      64  57.182301  7.101096  62.508123\n",
       "7  12      66  64.254061  5.901982  68.680548"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# x_c_n is the current estimation at time t for time step t+1, c:current, n:next\n",
    "def f(r):\n",
    "    idx = r.name\n",
    "    \n",
    "    if idx-1 <0:\n",
    "        return 0\n",
    "    \n",
    "    a_p, b_p, x_p = data.iloc[idx-1].loc[['a', 'b', 'x']]\n",
    "    \n",
    "    x_c = data.iloc[idx].loc['demand']\n",
    "\n",
    "    a_c = alpha * x_c + (1-alpha)*(a_p + phi * b_p)\n",
    "    b_c = beta * (a_c - a_p) + (1-beta) * phi * b_p\n",
    "    x_hat_c = a_c + b_c * phi\n",
    "    \n",
    "    data.set_value(index=idx, col='a', value=a_c)\n",
    "    data.set_value(index=idx, col='b', value=b_c)\n",
    "    data.set_value(index=idx, col='x', value=x_hat_c)\n",
    "    \n",
    "data.apply(f, axis=1)\n",
    "\n",
    "data.set_value(index=0, col='x', value=data.iloc[0]['a'] + phi*data.iloc[0]['b'])\n",
    "\n",
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
